#INCLUDE "PROTHEUS.CH"
#INCLUDE "COLORS.CH"
#INCLUDE "TBICONN.CH"

#DEFINE MAXMENLIN 080

/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Programa  ³XmlNFeSef ³ Autor ³ Eduardo Riera         ³ Data ³13.02.2007³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³Rdmake de exemplo para geracao da Nota Fiscal Eletronica do ³±±
±±³          ³SEFAZ - Versao T01.00                                       ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Retorno   ³String da Nota Fiscal Eletronica                            ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Parametros³ExpC1: Tipo da NF                                           ³±±
±±³          ³       [0] Entrada                                          ³±±
±±³          ³       [1] Saida                                            ³±±
±±³          ³ExpC2: Serie da NF                                          ³±±
±±³          ³ExpC3: Numero da nota fiscal                                ³±±
±±³          ³ExpC4: Codigo do cliente ou fornecedor                      ³±±
±±³          ³ExpC5: Loja do cliente ou fornecedor                        ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³   DATA   ³ Programador   ³Manutencao efetuada                         ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³          ³               ³                                            ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/

User Function FSW05M01(cTipo,cSerie,cNota,cClieFor,cLoja)

// Variaveis específicas para
Local _cMsgAux := "" // Variavel auxiliar par moantagem dos textos com quebra.
Local _aNFORIG := {} // Notas de Origem
Local _nPos    := 0  // Variavel auxiliar para função Ascan
Local cNFORIG  := "" // Auxiliar para notas de devolucao
Local ccarac   := "" // Auxiliar para notas de devolucao
Local _aArea   := {} // Auxiliar para guardar area atual
Local i        := 0  // Variável de loop
Local _nDesc   := 0  // Desconto
Local xCliente := {} // Dados do Cliente
Local nPerICMS := 0 //getmv("BK_ICMSAPR") // Percentual para a mensagem específica da formula 702.

Local nX         := 0
Local nY		 := 0

Local oWSNfe

Local cString    := ""
Local cAliasSE1  := "SE1"
Local cAliasSD2  := "SD2"
Local cNatOper   := ""
Local cModFrete  := ""
Local cScan      := ""
Local cEspecie   := ""
Local cMensCli   := ""
Local cMensFis   := ""
Local cNFe       := ""
Local cMV_LJTPNFE:= SuperGetMV("MV_LJTPNFE", ," ")
Local cMVSUBTRIB := ""
Local cLJTPNFE	 := ""
Local cWhere	 := ""
Local cMunISS	 := ""
Local cCodIss	 := ""
Local cValIPI    := ""
Local cNCM	     := ""

Local nPosI		 :=	0
Local nPosF	     :=	0
Local nBaseIrrf  := 0
Local nValIrrf   := 0
Local nValIPI    := 0
Local nValAux    := 0
Local nValPisZF  := 0
Local nValCofZF	 := 0

Local lQuery     := .F.
Local lCalSol	 := .F.
Local lEasy		 := SuperGetMV("MV_EASY") == "S"
Local lEECFAT	 := SuperGetMv("MV_EECFAT")
Local lNatOper   := GetNewPar("MV_SPEDNAT",.F.)
Local lInfAdZF   := GetNewPar("MV_INFADZF",.F.)
Local lOk		 := .T.
Local lCabAnf	 := .T.

Local aNota     := {}
Local aDupl     := {}
Local aDest     := {}
Local aEntrega  := {}
Local aProd     := {}
Local aICMS     := {}
Local aICMSST   := {}
Local aIPI      := {}
Local aPIS      := {}
Local aCOFINS   := {}
Local aPISST    := {}
Local aCOFINSST := {}
Local aISSQN    := {}
Local aISS      := {}
Local aCST      := {}
Local aRetido   := {}
Local aTransp   := {}
Local aImp      := {}
Local aVeiculo  := {}
Local aReboque  := {}
Local aEspVol   := {}
Local aNfVinc   := {}
Local aPedido   := {}
Local aTotal    := {0,0}
Local aOldReg   := {}
Local aOldReg2  := {}
Local aMed		:= {}
Local aArma		:= {}
Local aveicProd	:= {}
Local aIEST		:= {}
Local aDI		:= {}
Local aAdi		:= {}
Local aExp		:= {}
Local aPisAlqZ	:= {}
Local aCofAlqZ	:= {}
Local aIPIDev	:= {}
Local aIPIAux	:= {}
Local aNotaServ := {}
Local aAnfC		:= {}
Local aAnfI		:= {}

Local nPisRet   := 0
Local nCofRet   := 0
Local nInssRet  := 0
Local nIrRet    := 0
Local nCsllRet  := 0
Local nDedu     := 0
Local nIssRet   := 0
Local nTotRet   := 0
Local cDescServ := SuperGetMV("MV_NFESERV", ,"2")
Local cConjug   := AllTrim(SuperGetMv("MV_NFECONJ",,""))
Local cServ     := ""
Local aAreaSF3  := {}
Local cMunPres  := ""
Local aRetServ  := {}
Local cRetISS   := ""
Local cTipoNF   := ""
Local cDocEnt   := ""
Local cSerEnt   := ""
Local cFornece  := ""
Local cLojaEnt  := ""
Local cTipoNFEnt:= ""
Local cPedido   := ""
Local cItemPC   := ""
Local cNFOri    := ""
Local cSerOri   := ""
Local cItemOri  := ""
Local cProd     := ""
Local cTribMun  := ""
Local cModXML   := ""
Local cItem		:= ""
Local cAnfavea	:= ""
Local cSerNfCup := ""  				// Serie da NF sobre Cupom
Local cNumNfCup := ""  	 			// Numero do Documento da NF sobre Cupom
Local aAreaSF2  := {}    			// Area do SF2
Local lNfCup	:= .F.				// Define se eh Nf sobre cupom
Local aAreaSD2  := {}    			// Area do SD2
Local cD2Cfop  	:= ""    			// Area do SD2
Local lIpiDev   := GetNewPar("MV_IPIDEV",.F.)

Private aUF     := {}
Private lAnfavea:= If(AliasIndic("CDR") .And. AliasIndic("CDS"),.T.,.F.)

// Variável com as mensagens adicionais da PORTONAV
Private aMensagem := {}
Private nIssRetBC := 0
Private xVencto   := ""

//DEFAULT cTipo   := PARAMIXB[1]
//DEFAULT cSerie  := PARAMIXB[3]
//DEFAULT cNota   := PARAMIXB[4]
//DEFAULT cClieFor:= /PARAMIXB[5]
//DEFAULT cLoja   := /PARAMIXB[6]
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Preenchimento do Array de UF                                            ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aadd(aUF,{"RO","11"})
aadd(aUF,{"AC","12"})
aadd(aUF,{"AM","13"})
aadd(aUF,{"RR","14"})
aadd(aUF,{"PA","15"})
aadd(aUF,{"AP","16"})
aadd(aUF,{"TO","17"})
aadd(aUF,{"MA","21"})
aadd(aUF,{"PI","22"})
aadd(aUF,{"CE","23"})
aadd(aUF,{"RN","24"})
aadd(aUF,{"PB","25"})
aadd(aUF,{"PE","26"})
aadd(aUF,{"AL","27"})
aadd(aUF,{"MG","31"})
aadd(aUF,{"ES","32"})
aadd(aUF,{"RJ","33"})
aadd(aUF,{"SP","35"})
aadd(aUF,{"PR","41"})
aadd(aUF,{"SC","42"})
aadd(aUF,{"RS","43"})
aadd(aUF,{"MS","50"})
aadd(aUF,{"MT","51"})
aadd(aUF,{"GO","52"})
aadd(aUF,{"DF","53"})
aadd(aUF,{"SE","28"})
aadd(aUF,{"BA","29"})
aadd(aUF,{"EX","99"})

DbSelectArea ("SX6")
SX6->(DbSetOrder (1))
If (SX6->(DbSeek (xFilial ("SX6")+"MV_SUBTRI")))
	Do While !SX6->(Eof ()) .And. xFilial ("SX6")==SX6->X6_FIL .And. "MV_SUBTRI"$SX6->X6_VAR
		If !Empty(SX6->X6_CONTEUD)
			cMVSUBTRIB += "/"+AllTrim (SX6->X6_CONTEUD)
		EndIf
		SX6->(DbSkip ())
	EndDo
EndIf

// Nota Fiscal de Saida
If cTipo == "1"
	//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
	//³Posiciona NF                                                            ³
	//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
	dbSelectArea("SF2")
	dbSetOrder(1)
	If MsSeek(xFilial("SF2")+cNota+cSerie+cClieFor+cLoja)
		If AtIsRotina("U_RCLOTRPS")
			
			//Modelo do XML ISSNET ou BH
			cModXML:= "1"
			
			aadd(aNotaServ,SF2->F2_SERIE)
			aadd(aNotaServ,SF2->F2_DOC)
			aadd(aNotaServ,SF2->F2_EMISSAO)
			
			//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
			//³Posiciona cliente  ³
			//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
			dbSelectArea("SA1")
			dbSetOrder(1)
			MsSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)
			aadd(aDest,AllTrim(SA1->A1_CGC))
			aadd(aDest,SA1->A1_NOME)
			aadd(aDest,FisGetEnd(SA1->A1_END)[1])
			aadd(aDest,ConvType(IIF(FisGetEnd(SA1->A1_END)[2]<>0,FisGetEnd(SA1->A1_END)[2],"SN")))
//			aadd(aDest,Alltrim(SA1->A1_COMPLEM)) //aadd(aDest,FisGetEnd(SA1->A1_END)[4]) - ALTERADO POIS ESTAVA ENVIANDO E DUPLICANDO O ENDERECO NO CAMPO BAIRRO NA NFE.
			aadd(aDest,Alltrim("")) //aadd(aDest,FisGetEnd(SA1->A1_END)[4]) - ALTERADO POIS ESTAVA ENVIANDO E DUPLICANDO O ENDERECO NO CAMPO BAIRRO NA NFE.
			aadd(aDest,SA1->A1_BAIRRO)
			If !Upper(SA1->A1_EST) == "EX"
				aadd(aDest,SA1->A1_COD_MUN)
			Else
				aadd(aDest,"99999")
			EndIf
			cCodPrest:=SA1->A1_COD_MUN
			cCodPrest:=ConvType(aUF[aScan(aUF,{|x| x[1] == Upper(SA1->A1_EST)})][02]+SA1->A1_COD_MUN)
			aadd(aDest,Upper(SA1->A1_EST))
			aadd(aDest,SA1->A1_CEP)
			IF Len(alltrim(SA1->A1_DDD+SA1->A1_TEL)) > 8 
				aadd(aDest,SA1->A1_DDD+SA1->A1_TEL)
			Else
				aadd(aDest,'000000000')
			Endif
			aadd(aDest,SA1->A1_INSCRM)				
			aadd(aDest,SA1->A1_EMAIL) 
			
			If !Upper(SA1->A1_EST) == "EX"
				SC6->(dbSetOrder(4))
				SC5->(dbSetOrder(1))
				If (SC6->(MsSeek(xFilial("SC6")+SF2->F2_DOC+SF2->F2_SERIE)))
					SC5->(MsSeek(xFilial("SC5")+SC6->C6_NUM))
					
					If Empty (SC5->C5_FORNISS)
						aadd(aDest,SA1->A1_COD_MUN)
						aadd(aDest,Upper(SA1->A1_EST))
					Else
						SA2->(dbSetOrder(1))
						SA2->(MsSeek(xFilial("SA2")+SC5->C5_FORNISS+"00"))
						aadd(aDest,SA2->A2_COD_MUN)
						aadd(aDest,Upper(SA2->A2_EST))
					Endif
					
				Else
					aadd(aDest,SA1->A1_COD_MUN)
					aadd(aDest,Upper(SA1->A1_EST))
				EndIf
			Else
				aadd(aDest,"99999")
				aadd(aDest,Upper(SA1->A1_EST))
				
			EndIf			
			
			dbSelectArea("SF3")
			dbSetOrder(4)
			MsSeek(xFilial("SF3")+SF2->F2_CLIENTE+SF2->F2_LOJA+SF2->F2_DOC+SF2->F2_SERIE)
			
			While !Eof() .And. xFilial("SF3") == SF3->F3_FILIAL .And.;
				SF2->F2_SERIE == SF3->F3_SERIE .And.;
				SF2->F2_DOC == SF3->F3_NFISCAL .And.  SF3->F3_TIPO=="S"
				
				//Natureza da Operação
				If SF3->(FieldPos("F3_ISSST")) > 0
					cNatOper:= SF3->F3_ISSST 
				EndIf
				
				 _cCodISS	:= SF3->F3_CODISS        
				
				//Tipo de RPS - O sistema de BH ainda não está recebendo Notas Conjugadas
				//If SF2->F2_ESPECIE $ cConjug
				//cTipoRps:="2" //RPS - Conjugada (Mista)
				If !Empty(SF2->F2_PDV)
					cTipoRps:="3" //Cupom
				Else
					cTipoRps:="1" //RPS
				EndIf
				
				
				
				//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				//³Pega os impostos de retencao somente quando houver a retenção, ³
				//³ou seja, os titulos de retenção que existirem                  ³
				//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				dbSelectArea("SE1")
				SE1->(dbSetOrder(2))
				If SE1->(dbSeek(xFilial("SE1")+SF3->F3_CLIEFOR+SF3->F3_LOJA+SF3->F3_SERIE+SF3->F3_NFISCAL))
					nTotRet:=SumAbatRec(SE1->E1_PREFIXO,SE1->E1_NUM,SE1->E1_PARCELA,SE1->E1_MOEDA,"V",SE1->E1_BAIXA,,@nIrRet,@nCsllRet,@nPisRet,@nCofRet,@nInssRet)
				EndIf
				
				aadd(aRetServ,{nIrRet,nCsllRet,nPisRet,nCofRet,nInssRet,nTotRet})
				
				//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				//³Pega as deduções ³
				//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				If SF3->(FieldPos("F3_ISSSUB"))>0
					nDedu+= SF3->F3_ISSSUB
				EndIf
				
				If SF3->(FieldPos("F3_ISSMAT"))>0
					nDedu+= SF3->F3_ISSMAT
				EndIf
				
				//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				//³Obtem os dados do Serviço ³
				//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				If SX5->(dbSeek(xFilial("SX5")+"60"+_cCODISS))
					//Verificar a descrição do serviço.
					nValISS:=0
					SC6->(dbSetOrder(4))
					SC5->(dbSetOrder(1))
					MsSeek(xFilial("SC6")+SF3->F3_NFISCAL+SF3->F3_SERIE)
					MsSeek(xFilial("SC5")+SC6->C6_NUM)
					
					If !Empty(SC5->C5_ZUF)
					
					cCodPrest:=SC5->C5_ZCID
					cCodPrest:=ConvType(aUF[aScan(aUF,{|x| x[1] == Upper(SC5->C5_ZUF)})][02]+SC5->C5_ZCID)
					
					EndIf
					cPed := SC6->C6_NUM     
					nzViss:=SC5->C5_ZALIQ
					//--Pegar os Titulos para imprimir na Nota. 
					Private cQuery:= ""
					Private nQtd01:=0
					Private cTitSQL:=GetNextAlias()
						                                                                                        
					cQuery:=" SELECT DISTINCT(E1_VENCREA) VENCIMENTO,R_E_C_N_O_ REC"   
					cQuery+=" FROM "+RetSqlName("SE1")+" SE1"
					cQuery+=" WHERE E1_FILIAL    = '" + xFilial("SE1")+"'"
					cQuery+=" AND E1_CLIENTE     = '"+Padr(SF3->F3_CLIEFOR,TamSX3("E1_CLIENTE")[1])+"'"
					cQuery+=" AND E1_LOJA        = '"+Padr(SF3->F3_LOJA,TamSX3("E1_LOJA")[1])+"'"
					cQuery+=" AND E1_PREFIXO     = '"+Padr(SF2->F2_PREFIXO,TamSX3("E1_PREFIXO")[1])+"'"
					cQuery+=" AND E1_NUM         = '"+Padr(SF3->F3_NFISCAL,TamSX3("E1_NUM")[1])+"'"  
					cQuery+=" AND E1_TIPO  IN ('NF')"
					cQuery+=" AND SE1.D_E_L_E_T_ = ' '"
						
					If Select(cTitSQL) <> 0
						(cTitSQL)->(dbCloseArea())
					EndIf
						
					dbUseArea(.T.,"TOPCONN",TCGenqry(,,cQuery),(cTitSQL),.T.,.T.)
					cServ:="" 
					cConServ:="VENCIMENTO:
					cConServ+="&#10;&#13;"
					
					//Conta qtd de registros  
					(cTitSQL)->(dbGotop())  
					p:=1
					While !(cTitSQL)->(EOF())  
						("SE1")->(dbGoto((cTitSQL)->REC))  
						nValTit:=SaldoTit(SE1->E1_PREFIXO,SE1->E1_NUM,SE1->E1_PARCELA,SE1->E1_TIPO,SE1->E1_NATUREZ,"R",SE1->E1_CLIENTE,1,SE1->E1_VENCREA,,SE1->E1_LOJA,,SE1->E1_TXMOEDA)
						cConServ+=Alltrim(Str(p)) +"  -  "+sfForDate((cTitSQL)->VENCIMENTO)//+"  -  "+Alltrim(Transform(nValTit,"@E 999,999,999.99"))
						cConServ+="&#10;&#13;"
						p++
						(cTitSQL)->(dbSkip())
					EndDo	
					cConServ+=Alltrim(SC5->C5_MENNOTA)
					cConServ+="&#10;&#13;"
					cConServ+=Alltrim(SC5->C5_MENNOT2)
					cConServ+="&#10;&#13;"
					cConServ+=Alltrim(SC5->C5_MENNOT3)
					cConServ+="&#10;&#13;"
					cConServ+=Alltrim(SC5->C5_MENNOT4)
					cConServ+="&#10;&#13;"
					cConServ+=Alltrim(SC5->C5_MENNOT5)													                  
        			SC6->(dbSetOrder(4))
       			SC6->(dbSeek(xFilial("SC6")+SF3->F3_NFISCAL+SF3->F3_SERIE))
                 	While ("SC6")->(!EOF()) .And. (SC6->C6_NUM  == cPed)
		 				cServ +="[[Descricao="+(Alltrim(SC6->C6_DESCRI))+"][Quantidade="+Alltrim(Str(SC6->C6_QTDVEN))+"][ValorUnitario="+Alltrim(Str(SC6->C6_PRCVEN))+"]]"
		 				nValISS:=nValISS+SC6->C6_VRISS
        			("SC6")->(dbSkip())	
        			EndDo
				EndIf
				//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				//³Verifica se recolhe ISS Retido ³
				//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
				If SF3->(FieldPos("F3_RECISS"))>0
					If SF3->F3_RECISS $"1S"
						cRetIss :="1"
						nIssRet := SF3->F3_VALICM
					Else
						cRetIss :="2"
						nIssRet := 0
					Endif
				ElseIf SA1->A1_RECISS $"1S"
					cRetIss :="1"
					nIssRet := SF3->F3_VALICM
				Else
					cRetIss :="2"
					nIssRet := 0
				EndIf
				
				//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
				//³Verifica se municipio de prestação foi informado no pedido ³
				//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ								
				If SC5->(FieldPos("C5_MUNPRES")) > 0 .And. !Empty(SC5->C5_MUNPRES)
					cMunPres  := SC5->C5_MUNPRES
					cMunPres:= ConvType(aUF[aScan(aUF,{|x| x[1] == aDest[14]})][02]+cMunPres)
					cDescMunP := SC5->C5_DESCMUN
				Else
					cMunPres:= aDest[13]
					cMunPres:= ConvType(aUF[aScan(aUF,{|x| x[1] == aDest[14]})][02]+cMunPres)
					cDescMunP := aDest[08]
				EndIf
				
				
				dbSelectArea("SD2")
				dbSetOrder(3)
				MsSeek(xFilial("SD2")+SF2->F2_DOC+SF2->F2_SERIE+SF2->F2_CLIENTE+SF2->F2_LOJA)
								
				dbSelectArea("SB1")
				dbSetOrder(1)
				MsSeek(xFilial("SB1")+SD2->D2_COD)
				If SB1->(FieldPos("B1_TRIBMUN"))>0
					cTribMun:= SB1->B1_TRIBMUN
				EndIf
				
				If Empty(SF3->F3_CODISS)
					_cCodISS	:= SB1->B1_CODISS
				EndIf
				
		
				dbSelectArea("SF4")
				dbSetOrder(1)
				MsSeek(xFilial("SF4")+SD2->D2_TES)
				If SF3->F3_TIPO =="S"
					If SF3->F3_RECISS =="1"
						cSitTrib := "N"
					Elseif SF3->F3_RECISS =="2"
						cSitTrib:= "R"
					Elseif SF4->F4_LFISS =="I"
						cSitTrib:= "I"
					Else
						cSitTrib:= "N"
					Endif
				Endif				
				
				If SF3->F3_TIPO =="S"
					aadd(aISSQN,;
								{AllTrim(SF3->F3_CODISS),;
								SF3->F3_VALCONT+SF3->F3_VALOBSE,;
								SF3->F3_CNAE,;
								SF3->F3_ALIQICM,;
								SF3->F3_VALICM,;
								SF3->F3_VALOBSE,;
								cTribMun,;
								SF3->F3_BASEICM,;
								cSitTrib})
				Else
					aadd(aISSQN,;
								{"",;
								"",;
								"",;
								"",;
								"",;
								"",;
								"",;
								"",;
								""})
				Endif

				Aliquota:=((aISSQN[1][02]/aISSQN[1][05])-1)*100
        		
        		nValAliq:=(nValISS*100)/aISSQN[1][02]//Pegar o Valor da Aliquota do imposto de ISS.
        		     		
        		Aliquota:= nValAliq //Aliquota ISs.
        		
        		If Aliquota <=0 
        			nValAliq:=nzViss
				EndIf								
				cString := ""
				cString += NFSeIde(aNotaServ,cNatOper,cTipoRPS,cModXML)				
				cString += NFSeServ(aISSQN[1],aRetServ[1],nDedu,nIssRet,cRetIss,cServ,cMunPres,cModXML)	
				cString += NFSePrest(cModXML)
				cString += NFSeTom(aDest,cModXML,cMunPres)
												
				Exit
			EndDo
		EndIf
	EndIf
EndIf
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Geracao do arquivo XML                                                  ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
/*If !Empty(aNota)
	cString := ""
	cString += NfeIde(@cNFe,aNota,cNatOper,aDupl,aNfVinc)
	cString += NfeEmit(aIEST)
	cString += NfeDest(aDest)
	cString += NfeLocalEntrega(aEntrega)
	For nX := 1 To Len(aProd)
		cString += NfeItem(aProd[nX],aICMS[nX],aICMSST[nX],aIPI[nX],aPIS[nX],aPISST[nX],aCOFINS[nX],aCOFINSST[nX],aISSQN[nX],aCST[nX],aMed[nX],aArma[nX],aveicProd[nX],aDI[nX],aAdi[nX],aExp[nX],aPisAlqZ[nX],aCofAlqZ[nX],aAnfI[nX],cTipo)
	Next nX
	cString += NfeTotal(aTotal,aRetido)
	cString += NfeTransp(cModFrete,aTransp,aImp,aVeiculo,aReboque,aEspVol)
	cString += NfeCob(aDupl)
	cString += NfeInfAd(cMensCli,cMensFis,aPedido,aExp)
	cString += "</infNFe>"
EndIf*/
Return({cNfe,EncodeUTF8(cString)})

Static Function NfeIde(cChave,aNota,cNatOper,aDupl,aNfVinc)

Local cString:= ""
Local cNFVinc:= ""
Local cModNot:= ""
Local lAvista:= Len(aDupl)==1 .And. aDupl[01][02]<=DataValida(aNota[03]+1,.T.)
Local lDSaiEnt := GetNewPar("MV_DSAIENT", .T.)
Local nX     := 0

cChave := aUF[aScan(aUF,{|x| x[1] == SM0->M0_ESTCOB})][02]+FsDateConv(aNota[03],"YYMM")+SM0->M0_CGC+"55"+StrZero(Val(aNota[01]),3)+StrZero(Val(aNota[02]),9)+Inverte(StrZero(Val(aNota[02]),9))

cString += '<infNFe versao="T01.00">'
cString += '<ide>'
cString += '<cUF>'+ConvType(aUF[aScan(aUF,{|x| x[1] == SM0->M0_ESTCOB})][02],02)+'</cUF>'
cString += '<cNF>'+ConvType(Inverte(StrZero(Val(aNota[02]),Len(aNota[02]))),09)+'</cNF>'
cString += '<natOp>'+ConvType(cNatOper)+'</natOp>'
cString += '<indPag>'+IIF(lAVista,"0",IIf(Len(aDupl)==0,"2","1"))+'</indPag>'
cString += '<serie>'+ConvType(Val(aNota[01]),3)+'</serie>'
cString += '<nNF>'+ConvType(Val(aNota[02]),9)+'</nNF>'
cString += '<dEmi>'+ConvType(aNota[03])+'</dEmi>
cString += NfeTag('<dSaiEnt>',Iif(lDSaiEnt, "", ConvType(aNota[03])))
cString += '<tpNF>'+aNota[04]+'</tpNF>'



If !Empty(aNfVinc)
	
	cModNot := AModNot(aNfVinc[1][06])
	
	If cModNot == '02'
		aNfVinc   := {}
	EndIf
	
	cString += '<NFRef>'
	For nX := 1 To Len(aNfVinc)
		If !(ConvType(aUF[aScan(aUF,{|x| x[1] == aNfVinc[nX][05]})][02],02)+;
			FsDateConv(aNfVinc[nX][01],"YYMM")+;
			aNfVinc[nX][04]+;
			AModNot(aNfVinc[nX][06])+;
			ConvType(Val(aNfVinc[nX][02]),3)+;
			ConvType(Val(aNfVinc[nX][03]),9) $ cNFVinc )
			cString += '<RefNF>'
			cString += '<cUF>'+ConvType(aUF[aScan(aUF,{|x| x[1] == aNfVinc[nX][05]})][02],02)+'</cUF>'
			cString += '<AAMM>'+FsDateConv(aNfVinc[nX][01],"YYMM")+'</AAMM>'
			cString += '<CNPJ>'+aNfVinc[nX][04]+'</CNPJ>'
			cString += '<mod>'+AModNot(aNfVinc[nX][06])+'</mod>'
			cString += '<serie>'+ConvType(Val(aNfVinc[nX][02]),3)+'</serie>'
			cString += '<nNF>'+ConvType(Val(aNfVinc[nX][03]),9)+'</nNF>'
			cString += '<cNF>'+Inverte(StrZero(Val(aNfVinc[nX][03]),9))+'</cNF>'
			cString += '</RefNF>'
			
			cNFVinc += ConvType(aUF[aScan(aUF,{|x| x[1] == aNfVinc[nX][05]})][02],02)+;
			FsDateConv(aNfVinc[nX][01],"YYMM")+;
			aNfVinc[nX][04]+;
			AModNot(aNfVinc[nX][06])+;
			ConvType(Val(aNfVinc[nX][02]),3)+;
			ConvType(Val(aNfVinc[nX][03]),9)
		EndIf
	Next nX
	cString += '</NFRef>'
EndIf
cString += '<tpNFe>'+IIF(!Empty(aNfVinc).And. !(aNota[5]$"NDB"),"2","1")+'</tpNFe>'
cString += '</ide>'

Return( cString )

Static Function NfeEmit(aIEST)

Local cString := ""
Local lEndFis := GetNewPar("MV_SPEDEND",.F.)

DEFAULT aIEST	 := {}

cString := '<emit>'
cString += '<CNPJ>'+SM0->M0_CGC+'</CNPJ>
cString += '<Nome>'+ConvType(SM0->M0_NOMECOM)+'</Nome>'
cString += NfeTag('<Fant>',ConvType(SM0->M0_NOME))
cString += '<enderEmit>'
cString += '<Lgr>'+IIF(!lEndFis,ConvType(FisGetEnd(SM0->M0_ENDCOB)[1]),ConvType(FisGetEnd(SM0->M0_ENDENT)[1]))+'</Lgr>'
cString += '<nro>'+IIF(!lEndFis,ConvType(IIF(FisGetEnd(SM0->M0_ENDCOB)[2]<>0,FisGetEnd(SM0->M0_ENDCOB)[2],"SN")),ConvType(IIF(FisGetEnd(SM0->M0_ENDENT)[2]<>0,FisGetEnd(SM0->M0_ENDENT)[2],"SN")))+'</nro>'
cEndEmit :=  IIF(!lEndFis,Iif(!Empty(SM0->M0_COMPCOB),SM0->M0_COMPCOB,ConvType(FisGetEnd(SM0->M0_ENDCOB)[4]) ) ,;
Iif(!Empty(SM0->M0_COMPENT),SM0->M0_COMPENT,ConvType(FisGetEnd(SM0->M0_ENDENT)[4]) ) )
cString += NfeTag('<Cpl>',cEndEmit)
//cString += NfeTag('<Cpl>',IIF(!lEndFis,ConvType(FisGetEnd(SM0->M0_ENDCOB)[4]),ConvType(FisGetEnd(SM0->M0_ENDENT)[4])))
cString += '<Bairro>'+IIF(!lEndFis,ConvType(SM0->M0_BAIRCOB),ConvType(SM0->M0_BAIRENT))+'</Bairro>'
cString += '<cMun>'+ConvType(SM0->M0_CODMUN)+'</cMun>'
cString += '<Mun>'+IIF(!lEndFis,ConvType(SM0->M0_CIDCOB),ConvType(SM0->M0_CIDENT))+'</Mun>'
cString += '<UF>'+IIF(!lEndFis,ConvType(SM0->M0_ESTCOB),ConvType(SM0->M0_ESTENT))+'</UF>'
cString += NfeTag('<CEP>',IIF(!lEndFis,ConvType(SM0->M0_CEPCOB),ConvType(SM0->M0_CEPENT)))
cString += NfeTag('<cPais>',"1058")
cString += NfeTag('<Pais>',"BRASIL")
cString += NfeTag('<fone>',ConvType(FisGetTel(SM0->M0_TEL)[3],18))
cString += '</enderEmit>'
cString += '<IE>'+ConvType(VldIE(SM0->M0_INSC))+'</IE>'
If !Empty(aIEST)
	cString += NfeTag('<IEST>',aIEST[01])
Else
	cString += NfeTag('<IEST>',"")
EndIf

cString += NfeTag('<IM>',SM0->M0_INSCM)
cString += NfeTag('<CNAE>',ConvType(SM0->M0_CNAE))
cString += '</emit>'
Return(cString)

Static Function NfeDest(aDest)

Local cString:= ""

cString := '<dest>'
If Len(AllTrim(aDest[01]))==14
	cString += '<CNPJ>'+AllTrim(aDest[01])+'</CNPJ>'
ElseIf Len(AllTrim(aDest[01]))<>0
	cString += '<CPF>' +AllTrim(aDest[01])+'</CPF>'
Else
	cString += '<CNPJ></CNPJ>'
EndIf
cString += '<Nome>'+ConvType(aDest[02])+'</Nome>'
cString += '<enderDest>'
cString += '<Lgr>'+ConvType(aDest[03])+'</Lgr>'
cString += '<nro>'+ConvType(aDest[04])+'</nro>'
cString += NfeTag('<Cpl>',ConvType(aDest[05]))
cString += '<Bairro>'+ConvType(aDest[06])+'</Bairro>'
cString += '<cMun>'+ConvType(aUF[aScan(aUF,{|x| x[1] == aDest[09]})][02]+aDest[07])+'</cMun>'
cString += '<Mun>'+ConvType(aDest[08])+'</Mun>'
cString += '<UF>'+ConvType(aDest[09])+'</UF>'
cString += NfeTag('<CEP>',aDest[10])
cString += NfeTag('<cPais>',aDest[11])
cString += NfeTag('<Pais>',aDest[12])
cString += NfeTag('<fone>',ConvType(FisGetTel(aDest[13])[3],18))
cString += '</enderDest>'
cString += '<IE>'+ConvType(aDest[14])+'</IE>'
cString += NfeTag('<IESUF>',aDest[15])
cString += NfeTag('<EMAIL>',aDest[16])
cString += '</dest>'
Return(cString)

Static Function NfeLocalEntrega(aEntrega)

Local cString:= ""

If !Empty(aEntrega) .And. Len(AllTrim(aEntrega[01]))==14
	cString := '<entrega>'
	cString += '<CNPJ>'+AllTrim(aEntrega[01])+'</CNPJ>'
	cString += '<Lgr>'+ConvType(aEntrega[02])+'</Lgr>'
	cString += '<nro>'+ConvType(aEntrega[03])+'</nro>'
	cString += NfeTag('<Cpl>',ConvType(aEntrega[04]))
	cString += '<Bairro>'+ConvType(aEntrega[05])+'</Bairro>'
	cString += '<cMun>'+ConvType(aUF[aScan(aUF,{|x| x[1] == aEntrega[08]})][02]+aEntrega[06])+'</cMun>'
	cString += '<Mun>'+ConvType(aEntrega[07])+'</Mun>'
	cString += '<UF>'+ConvType(aEntrega[08])+'</UF>'
	cString += '</entrega>'
EndIf
Return(cString)

Static Function NfeItem(aProd,aICMS,aICMSST,aIPI,aPIS,aPISST,aCOFINS,aCOFINSST,aISSQN,aCST,aMed,aArma,aveicProd,aDI,aAdi,aExp,aPisAlqZ,aCofAlqZ,aAnfI,cTipo)

Local cString    := ""
Local lAnfProd	 := SuperGetMV("MV_ANFPROD",,.T.)
Local cValICM	 := ""
Local cBaseIcm   := ""
DEFAULT aICMS    := {}
DEFAULT aICMSST  := {}
DEFAULT aIPI     := {}
DEFAULT aPIS     := {}
DEFAULT aPISST   := {}
DEFAULT aCOFINS  := {}
DEFAULT aCOFINSST:= {}
DEFAULT aISSQN   := {}
DEFAULT aMed     := {}
DEFAULT aArma    := {}
DEFAULT aveicProd:= {}
DEFAULT aDI		 := {}
DEFAULT aAdi	 := {}
DEFAULT aExp	 := {}
DEFAULT aAnfI	 := {}

cString += '<det nItem="'+ConvType(aProd[01])+'">'
cString += '<prod>'
cString += '<cProd>'+ConvType(aProd[02])+'</cProd>'
cString += '<ean>'+ConvType(aProd[03])+'</ean>'
cString += '<Prod>'+ConvType(aProd[04],120)+'</Prod>'
cString += NfeTag('<NCM>',ConvType(aProd[05]))
cString += NfeTag('<EXTIPI>',ConvType(aProd[06]))
cString += '<CFOP>'+ConvType(aProd[07])+'</CFOP>'
cString += '<uCom>'+ConvType(aProd[08])+'</uCom>'
cString += '<qCom>'+ConvType(aProd[09],12,4)+'</qCom>'
cString += '<vUnCom>'+ConvType(aProd[16],16,4)+'</vUnCom>'
cString += '<vProd>' +ConvType(aProd[10],15,2)+'</vProd>'
cString += '<eantrib>'+ConvType(aProd[03])+'</eantrib>'
cString += '<uTrib>'+ConvType(aProd[11])+'</uTrib>'
cString += '<qTrib>'+ConvType(aProd[12],12,4)+'</qTrib>'
cString += '<vUnTrib>'+ConvType(aProd[10]/aProd[12],16,4)+'</vUnTrib>'
cString += NfeTag('<vFrete>',ConvType(aProd[13],15,2))
cString += NfeTag('<vSeg>'  ,ConvType(aProd[14],15,2))
cString += NfeTag('<vDesc>' ,ConvType(aProd[15],15,2))

//Ver II - Average - Tag da Declaração de Importação aDI
If Len(aDI)>0
	cString += '<DI>'
	cString += '<nDI>'+ConvType(aDI[04][03])+'</nDI>'
	cString += '<dtDi>'+ConvType(aDI[05][03])+ '</dtDi>'
	cString += '<LocDesemb>'+ConvType(aDI[06][03])+ '</LocDesemb>'
	cString += '<UFDesemb>'+ConvType(aDI[07][03])+ '</UFDesemb>'
	cString += '<dtDesemb>'+ConvType(aDI[08][03])+ '</dtDesemb>'
	cString += '<Exportador>'+ConvType(aDI[09][03])+ '</Exportador>'
	If Len(aAdi)>0
		cString += '<adicao>'
		cString += '<Adicao>'+ConvType(aAdi[10][03])+ '</Adicao>'
		cString += '<SeqAdic>'+ConvType(aAdi[11][03])+ '</SeqAdic>'
		cString += '<Fabricante>'+ConvType(aAdi[12][03])+ '</Fabricante>'
		cString += '<vDescDI>'+ConvType(aAdi[13][03])+ '</vDescDI>'
		cString += '</adicao>'
	EndIf
	cString += '</DI>'
EndIf

If !Empty(aProd[17])
	cString += '<comb>'
	cString += NfeTag('<cprodanp>',ConvType(aProd[17]))
	cString += NfeTag('<codif>',ConvType(aProd[18]))
	cString += '</comb>'
	//Tratamento da CIDE - Ver com a Average
	//Tratamento de ICMS-ST - Ver com fisco
EndIf

//Veiculos Novos
If !Empty(aveicProd) .And. !Empty(aveicProd[01])
	cString += '<veicProd>'
	cString += '<tpOp>'+ConvType(aveicProd[01])+'</tpOp>'
	cString += NfeTag('<chassi>' ,ConvType(aveicProd[02],17))
	cString += NfeTag('<cCor>'   ,ConvType(aveicProd[03],4))
	cString += NfeTag('<xCor>'   ,ConvType(aveicProd[04],40))
	cString += NfeTag('<pot>'    ,ConvType(aveicProd[05],4))
	cString += NfeTag('<cm3>'    ,ConvType(aveicProd[06],4))
	cString += NfeTag('<pesol>'  ,ConvType(aveicProd[07],9))
	cString += NfeTag('<pesob>'  ,ConvType(aveicProd[08],9))
	cString += NfeTag('<nserie>' ,ConvType(aveicProd[09],9))
	cString += NfeTag('<tpcomb>' ,ConvType(aveicProd[10],8))
	cString += NfeTag('<nmotor>' ,ConvType(aveicProd[11],21))
	cString += NfeTag('<cmkg>'   ,ConvType(aveicProd[12],9))
	cString += NfeTag('<dist>'   ,ConvType(aveicProd[13],4))
	cString += NfeTag('<renavam>',ConvType(aveicProd[14],9))
	cString += NfeTag('<anomod>' ,ConvType(aveicProd[15],4))
	cString += NfeTag('<anofab>' ,ConvType(aveicProd[16],4))
	cString += NfeTag('<tppint>' ,ConvType(aveicProd[17],1))
	cString += NfeTag('<tpveic>' ,ConvType(aveicProd[18],2))
	cString += '<espvei>'+ConvType(aveicProd[19])+'</espvei>'
	cString += NfeTag('<vin>'    ,ConvType(aveicProd[20],1))
	cString += NfeTag('<condvei>',ConvType(aveicProd[21],1))
	cString += NfeTag('<cmod>'   ,ConvType(aveicProd[22],6))
	cString += '</veicProd>'
EndIf


//Medicamentos
If !Empty(aMed) .And. !Empty(aMed[01])
	cString += '<med>'
	cString += '<Lote>'+ConvType(aMed[01],20)+'</Lote>'
	cString += NfeTag('<qLote>',ConvType(aMed[02],11,3))
	cString += NfeTag('<dtFab>',ConvType(aMed[03]))
	cString += NfeTag('<dtVal>',ConvType(aMed[04]))
	cString += NfeTag('<vPMC>' ,ConvType(aMed[05],15,2))
	cString += '</med>'
EndIf

//Armas de Fogo
If !Empty(aArma) .And. !Empty(aArma[01])
	cString += '<arma>'
	cString += '<tpArma>'+ConvType(aArma[01])+'</tpArma>'
	cString += NfeTag('<nSerie>',ConvType(aArma[02],9))
	cString += NfeTag('<nCano>' ,ConvType(aArma[02],9))
	cString += NfeTag('<descr>' ,ConvType(aArma[03],256))
	cString += '</arma>'
EndIf


cString += '</prod>'
cString += '<imposto>'
cString += '<codigo>ICMS</codigo>'
If Len(aIcms)>0
	cString += '<cpl>'
	cString += '<orig>'+ConvType(aICMS[01])+'</orig>'
	cString += '</cpl>'
	cString += '<Tributo>'
	cString += '<CST>'+ConvType(aICMS[02])+'</CST>'
	cString += '<modBC>'+ConvType(aICMS[03])+'</modBC>'
	cString += '<pRedBC>'+ConvType(aICMS[04],5,2)+'</pRedBC>'
	cString += '<vBC>'+ConvType(aICMS[05],15,2)+'</vBC>'
	//cString += '<aliquota>'+ConvType(aICMS[06],5,2)+'</aliquota>'
	cString += '<aliquota>'+ConvType(nValAliq,5,2)+'</aliquota>'
	cString += '<valor>'+ConvType(aICMS[07],15,2)+'</valor>'
	cString += '<qtrib>'+ConvType(aICMS[09],16,4)+'</qtrib>'
	cString += '<vltrib>'+ConvType(aICMS[10],15,4)+'</vltrib>'
	cString += '</Tributo>'
Else
	cString += '<cpl>'
	cString += '<orig>'+ConvType(aCST[02])+'</orig>'
	cString += '</cpl>'
	cString += '<Tributo>'
	cString += '<CST>'+ConvType(aCST[01])+'</CST>'
	cString += '<modBC>'+ConvType(3)+'</modBC>'
	cString += '<pRedBC>'+ConvType(0,5,2)+'</pRedBC>'
	cString += '<vBC>'+ConvType(0,15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(0,5,2)+'</aliquota>'
	cString += '<valor>'+ConvType(0,15,2)+'</valor>'
	cString += '<qtrib>'+ConvType(0,16,4)+'</qtrib>'
	cString += '<vltrib>'+ConvType(0,15,4)+'</vltrib>'
	cString += '</Tributo>'
EndIf
cString += '</imposto>'
If Len(aIcmsST)>0
	Do Case
		Case aICMSST[03] == "0"
			aICMSST[03] := "4"
		Case aICMSST[03] == "1"
			aICMSST[03] := "5"
		OtherWise
			aICMSST[03] := "0"
	EndCase
	cString += '<imposto>'
	cString += '<codigo>ICMSST</codigo>'
	cString += '<cpl>'
	cString += '<pmvast>'+ConvType(aICMSST[08],5,2)+'</pmvast>'
	cString += '</cpl>'
	cString += '<Tributo>'
	cString += '<CST>'+ConvType(aICMSST[02])+'</CST>'
	cString += '<modBC>'+ConvType(aICMSST[03])+'</modBC>'
	cString += '<pRedBC>'+ConvType(aICMSST[04],5,2)+'</pRedBC>'
	cString += '<vBC>'+ConvType(aICMSST[05],15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(aICMSST[06],5,2)+'</aliquota>'
	cString += '<valor>'+ConvType(aICMSST[07],15,2)+'</valor>'
	cString += '<qtrib>'+ConvType(aICMSST[09],16,4)+'</qtrib>'
	cString += '<vltrib>'+ConvType(aICMSST[10],15,4)+'</vltrib>'
	cString += '</Tributo>'
	cString += '</imposto>'
ELse
	cString += '<imposto>'
	cString += '<codigo>ICMSST</codigo>'
	cString += '<cpl>'
	cString += '<pmvast>0</pmvast>'
	cString += '</cpl>'
	cString += '<Tributo>'
	cString += '<CST>'+ConvType(aCST[01])+'</CST>'
	If aCST[01] = "60" .AND. cTipo=="1"
		
		SPEDRastro(aProd[20],aProd[19],aProd[02],@cBaseIcm,@cValICM)
		cString += '<modBC>0</modBC>'
		cString += '<pRedBC>'+ConvType(0,5,2)+'</pRedBC>'
	Else
		cString += '<modBC>0</modBC>'
		cString += '<pRedBC>'+ConvType(0,5,2)+'</pRedBC>'
	Endif
	If !Empty(cBaseIcm)
		cString += '<vBC>'+ConvType(cBaseIcm,15,2)+'</vBC>'
	Else
		cString += '<vBC>'+ConvType(0,15,2)+'</vBC>'
	Endif
	cString += '<aliquota>'+ConvType(0,5,2)+'</aliquota>'
	If !Empty(cValICM)
		cString += '<valor>'+ConvType(cValICM,15,2)+'</valor>'
	Else
		cString += '<valor>'+ConvType(0,15,2)+'</valor>'
	Endif
	
	cString += '<qtrib>'+ConvType(0,16,4)+'</qtrib>'
	cString += '<vltrib>'+ConvType(0,15,4)+'</vltrib>'
	cString += '</Tributo>'
	cString += '</imposto>'
	
EndIf
If Len(aIPI)>0
	cString += '<imposto>'
	cString += '<codigo>IPI</codigo>'
	cString += '<cpl>'
	cString += NfeTag('<clEnq>',ConvType(AIPI[01]))
	cString += NfeTag('<cSelo>',ConvType(AIPI[02]))
	cString += NfeTag('<qSelo>',ConvType(AIPI[03]))
	cString += NfeTag('<cEnq>' ,ConvType(AIPI[04]))
	cString += '</cpl>'
	cString += '<Tributo>'
	cString += '<CST>'+ConvType(AIPI[05])+'</CST>'
	cString += '<modBC>'+ConvType(AIPI[11])+'</modBC>'
	cString += '<pRedBC>'+ConvType(AIPI[12],5,2)+'</pRedBC>'
	cString += '<vBC>'  +ConvType(AIPI[06],15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(AIPI[09],5,2)+'</aliquota>'
	cString += '<vlTrib>'+ConvType(AIPI[08],15,4)+'</vlTrib>'
	cString += '<qTrib>'+ConvType(AIPI[07],16,4)+'</qTrib>'
	cString += '<valor>'+ConvType(AIPI[10],15,2)+'</valor>'
	cString += '</Tributo>'
	cString += '</imposto>'
EndIf
cString += '<imposto>'
cString += '<codigo>PIS</codigo>'
If Len(aPIS)>0
	cString += '<Tributo>'
	cString += '<CST>'+aPIS[01]+'</CST>'
	cString += '<modBC></modBC>'
	cString += '<pRedBC></pRedBC>'
	cString += '<vBC>'+ConvType(aPIS[02],15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(aPIS[03],5,2)+'</aliquota>'
	cString += '<vlTrib>'+ConvType(aPIS[06],15,4)+'</vlTrib>'
	cString += '<qTrib>'+ConvType(aPIS[05],16,4)+'</qTrib>'
	cString += '<valor>'+ConvType(aPIS[04],15,2)+'</valor>'
	cString += '</Tributo>'
Else
	cString += '<Tributo>'
	cString += '<CST>'+(IIF(Len(aPisAlqZ)>0 .And. aPisAlqZ[01]=="06",aPisAlqZ[01],"08"))+'</CST>'
	cString += '<modBC></modBC>'
	cString += '<pRedBC></pRedBC>'
	cString += '<vBC>'+ConvType(0,15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(0,5,2)+'</aliquota>'
	cString += '<vlTrib>'+ConvType(0,15,4)+'</vlTrib>'
	cString += '<qTrib>'+ConvType(0,16,4)+'</qTrib>'
	cString += '<valor>'+ConvType(0,15,2)+'</valor>'
	cString += '</Tributo>'
EndIf
cString += '</imposto>'
If Len(aPISST)>0
	cString += '<imposto>'
	cString += '<codigo>PISST</codigo>'
	cString += '<Tributo>'
	cString += '<CST>'+aPISST[01]+'</CST>'
	cString += '<modBC></modBC>'
	cString += '<pRedBC></pRedBC>'
	cString += '<vBC>'+ConvType(aPISST[02],15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(aPISST[03],5,2)+'</aliquota>'
	cString += '<vlTrib>'+ConvType(aPISST[06],15,4)+'</vlTrib>'
	cString += '<qTrib>'+ConvType(aPISST[05],16,4)+'</qTrib>'
	cString += '<valor>'+ConvType(aPISST[04],15,2)+'</valor>'
	cString += '</Tributo>'
	cString += '</imposto>'
EndIf
cString += '<imposto>'
cString += '<codigo>COFINS</codigo>'
If Len(aCOFINS)>0
	cString += '<Tributo>'
	cString += '<CST>'+aCOFINS[01]+'</CST>'
	cString += '<modBC></modBC>'
	cString += '<pRedBC></pRedBC>'
	cString += '<vBC>'+ConvType(aCOFINS[02],15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(aCOFINS[03],5,2)+'</aliquota>'
	cString += '<vlTrib>'+ConvType(aCOFINS[06],15,4)+'</vlTrib>'
	cString += '<qTrib>'+ConvType(aCOFINS[05],16,4)+'</qTrib>'
	cString += '<valor>'+ConvType(aCOFINS[04],15,2)+'</valor>'
	cString += '</Tributo>'
Else
	cString += '<Tributo>'
	cString += '<CST>'+(IIF(Len(aCofAlqZ)>0 .And. aCofAlqZ[01]=="06",aCofAlqZ[01],"08"))+'</CST>'
	cString += '<modBC></modBC>'
	cString += '<pRedBC></pRedBC>'
	cString += '<vBC>'+ConvType(0,15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(0,5,2)+'</aliquota>'
	cString += '<vlTrib>'+ConvType(0,15,4)+'</vlTrib>'
	cString += '<qTrib>'+ConvType(0,16,4)+'</qTrib>'
	cString += '<valor>'+ConvType(0,15,2)+'</valor>'
	cString += '</Tributo>'
EndIf
cString += '</imposto>'
If Len(aCOFINSST)>0
	cString += '<imposto>'
	cString += '<codigo>COFINSST</codigo>'
	cString += '<Tributo>'
	cString += '<CST>'+aCOFINSST[01]+'</CST>'
	cString += '<modBC></modBC>'
	cString += '<pRedBC></pRedBC>'
	cString += '<vBC>'+ConvType(aCOFINSST[02],15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(aCOFINSST[03],5,2)+'</aliquota>'
	cString += '<vlTrib>'+ConvType(aCOFINSST[06],15,4)+'</vlTrib>'
	cString += '<qTrib>'+ConvType(aCOFINSST[05],16,4)+'</qTrib>'
	cString += '<valor>'+ConvType(aCOFINSST[04],15,2)+'</valor>'
	cString += '</Tributo>'
	cString += '</imposto>'
EndIf

If Len(aISSQN)>0
	cString += '<imposto>'
	cString += '<codigo>ISS</codigo>'
	cString += '<Tributo>'
	cString += '<vBC>'+ConvType(aISSQN[01],15,2)+'</vBC>'
	cString += '<aliquota>'+ConvType(aISSQN[02],5,2)+'</aliquota>'
	cString += '<Valor>'+ConvType(aISSQN[03],15,4)+'</Valor>'
	cString += '</Tributo>'
	cString += '<cpl>'
	cString += '<cmunfg>'+aISSQN[04]+'</cmunfg>'
	cString += '<clistserv>'+aISSQN[05]+'</clistserv>'
	cString += '</cpl>'
	cString += '</imposto>'
EndIf

// Tratamento de imposto de importacao quando
If Len(aDI)>0 .And. !Empty(aAdi[17][03])
	cString += '<imposto>'
	cString += '<codigo>II</codigo>'
	cString += '<Tributo>'
	cString += '<vBC>'      +ConvType(aDI[17][03],15,2)+'</vBC>'
	cString += '<Valor>'    +ConvType(aDI[19][03],15,2)+'</Valor>'
	cString += '</Tributo>'
	cString += '<cpl>'
	cString += '<vDespAdu>' +ConvType(aDI[18][03],15,2)+'</vDespAdu>'
	cString += '<vIOF>'     +ConvType(aDI[20][03],15,2)+'</vIOF>'
	cString += '</cpl>'
	cString += '</imposto>'
EndIf

cString += '<infadprod>'
//Anfavea 
If lAnfavea
	If !Empty(aAnfI) .And. !Empty(aAnfI[01])
		cString += 	'<![CDATA[<id'
		If !Empty(aAnfI[01])
			cString += 	' item="' 		+ Iif(lAnfProd,aAnfI[01],aAnfI[26]) + '"'
		Endif
		If !Empty(aAnfI[02])
			cString += 	' ped="'		+ aAnfI[02] + '"'
		Endif
		If !Empty(aAnfI[03])
			cString += 	' sPed="'		+ aAnfI[03] + '"'
		Endif
		If !Empty(aAnfI[04])
			cString += 	' alt="'		+ aAnfI[04] + '"'
		Endif
		If !Empty(aAnfI[05])
			cString += 	' tpF="'		+ aAnfI[05] + '"'
		Endif
		cString += 	'/><div'
		If !Empty(aAnfI[06])
			cString += 	' uM="'  		+ aAnfI[06] + '"'
		Endif
		If !Empty(aAnfI[07])
			cString += 	' dVD="'		+ Dtos(aAnfI[07]) + '"'
		Endif
		If !Empty(aAnfI[08])
			cString += 	' pedR="'		+ aAnfI[08] + '"'
		Endif
		If !Empty(aAnfI[09])
			cString += 	' pE="'			+ aAnfI[09] + '"'
		Endif
		If !Empty(aAnfI[10])
			cString += 	' psB="'		+ Alltrim(Str(aAnfI[10],TAMSX3("B1_PESO")[1],TAMSX3("B1_PESO")[2])) + '"'
		Endif
		If !Empty(aAnfI[11])
			cString += 	' psL="'		+ Alltrim(Str(aAnfI[11],TAMSX3("B1_PESO")[1],TAMSX3("B1_PESO")[2])) + '"'
		Endif
		cString += 	'/><entg'
		If !Empty(aAnfI[12])
			cString += 	' tCh="'		+ Iif(aAnfI[12]=="PeA",'P&A',aAnfI[12]) + '"'
		Endif
		If !Empty(aAnfI[13])
			cString += 	' ch="'			+ aAnfI[13] + '"'
		Endif
		If !Empty(aAnfI[14])
			cString += 	' hCh="'		+ aAnfI[14] + '"'
		Endif
		If !Empty(aAnfI[15])
			cString += 	' qtEm="'		+ Alltrim(Str(aAnfI[15],14,2)) + '"'
		Endif
		If !Empty(aAnfI[16])
			cString += 	' qtlt="'		+ Alltrim(Str(aAnfI[16],14,2)) + '"'
		Endif
		cString += 	'/><dest'
		If !Empty(aAnfI[17])
			cString += 	' dca="'		+ aAnfI[17] + '"'
		Endif
		If !Empty(aAnfI[18])
			cString += 	' ptU="'		+ aAnfI[18] + '"'
		Endif
		If !Empty(aAnfI[19])
			cString += 	' trans="'		+ aAnfI[19] + '"'
		Endif
		cString += 	'/><ctl'
		If !Empty(aAnfI[20])
			cString += 	' ltP="'		+ aAnfI[20] + '"'
		Endif
		If !Empty(aAnfI[21])
			cString += 	' cPI="'		+ aAnfI[21] + '"'
		Endif
		cString += 	'/><ref'
		If !Empty(aAnfI[22])
			cString += 	' nFE="'		+ aAnfI[22] + '"'
		Endif
		If !Empty(aAnfI[23])
			cString += 	' sNE="'		+ aAnfI[23] + '"'
		Endif
		If !Empty(aAnfI[24])
			cString += 	' cdEm="'		+ aAnfI[24] + '"'
		Endif
		If !Empty(aAnfI[25])
			cString += 	' aF="'			+ aAnfI[25] + '"'
		Endif
		cString += 	'/>]]>'
	Endif
Endif
cString += '</infadprod>'
cString += '</det>'
Return(cString)

Static Function NfeTotal(aTotal,aRet)

Local cString:=""
Local nX     := 0

cString += '<total>'
cString += '<despesa>'+ConvType(aTotal[01],15,2)+'</despesa>'
cString += '<vNF>'+ConvType(aTotal[02],15,2)+'</vNF>'
If Len(aRet)>0
	For nX := 1 To Len(aRet)
		cString += '<TributoRetido>'
		cString += NfeTag('<codigo>' ,ConvType(aRet[nX,01],15,2))
		cString += NfeTag('<BC>'     ,ConvType(aRet[nX,02],15,2))
		cString += NfeTag('<valor>',ConvType(aRet[nX,03],15,2))
		cString += '</TributoRetido>'
	Next nX
EndIf
cString += '</total>'
Return(cString)

Static Function NfeTransp(cModFrete,aTransp,aImp,aVeiculo,aReboque,aVol)

Local nX := 0
Local cString := ""

DEFAULT aTransp := {}
DEFAULT aImp    := {}
DEFAULT aVeiculo:= {}
DEFAULT aReboque:= {}
DEFAULT aVol    := {}

cString += '<transp>'
cString += '<modFrete>'+cModFrete+'</modFrete>'
If Len(aTransp)>0
	cString += '<transporta>'
	If Len(aTransp[01])==14
		cString += NfeTag('<CNPJ>',aTransp[01])
	ElseIf Len(aTransp[01])<>0
		cString += NfeTag('<CPF>',aTransp[01])
	EndIf
	cString += NfeTag('<Nome>' ,ConvType(aTransp[02]))
	cString += NfeTag('<IE>'    ,aTransp[03])
	cString += NfeTag('<Ender>',ConvType(aTransp[04]))
	cString += NfeTag('<Mun>'  ,ConvType(aTransp[05]))
	cString += NfeTag('<UF>'    ,ConvType(aTransp[06]))
	cString += '</transporta>'
	If Len(aImp)>0 //Ver Fisco
		cString += '<retTransp>'
		cString += '<codigo>ICMS<codigo>'
		cString += '<Cpl>'
		cString += '<vServ>'+ConvType(aImp[01],15,2)+'</vServ>'
		cString += '<CFOP>'+ConvType(aImp[02])+'</CFOP>'
		cString += '<cMunFG>'+aImp[03]+'</cMunFG>'
		cString += '</Cpl>'
		cString += '<CST>'+aImp[04]+'</CST>'
		cString += '<MODBC>'+aImp[05]+'</MODBC>'
		cString += '<PREDBC>'+ConvType(aImp[06],5,2)+'</PREDBC>'
		cString += '<VBC>'+ConvType(aImp[07],15,2)+'</VBC>'
		cString += '<aliquota>'+ConvType(aImp[08],5,2)+'</aliquota>'
		cString += '<vltrib>'+ConvType(aImp[09],15,4)+'</vltrib>'
		cString += '<qtrib>'+ConvType(aImp[10],16,4)+'</qtrib>'
		cString += '<valor>'+ConvType(aImp[11],15,2)+'</valor>'
		cString += '</retTransp>'
	EndIf
	If Len(aVeiculo)>0
		cString += '<veicTransp>'
		cString += '<placa>'+ConvType(aVeiculo[01])+'</placa>'
		cString += '<UF>'   +ConvType(aVeiculo[02])+'</UF>'
		cString += NfeTag('<RNTC>',ConvType(aVeiculo[03]))
		cString += '</veicTransp>'
	EndIf
	If Len(aReboque)>0
		cString += '<reboque>'
		cString += '<placa>'+ConvType(aReboque[01])+'</placa>'
		cString += '<UF>'   +ConvType(aReboque[02])+'</UF>'
		cString += NfeTag('<RNTC>',ConvType(aReboque[03]))
		cString += '</reboque>'
	EndIf
EndIf
For nX := 1 To Len(aVol)
	cString += '<vol>'
	cString += NfeTag('<qVol>',ConvType(aVol[nX][02]))
	cString += NfeTag('<esp>' ,ConvType(aVol[nX][01],15,0))
	//cString += '<marca>' +aVol[03]+'</marca>'
	//cString += '<nVol>'  +aVol[04]+'</nVol>'
	cString += NfeTag('<pesoL>' ,ConvType(aVol[nX][03],15,3))
	cString += NfeTag('<pesoB>' ,ConvType(aVol[nX][04],15,3))
	//cString += '<nLacre>'+aVol[07]+'</nLacre>'
	cString += '</vol>
Next nX
cString += '</transp>'
Return(cString)

Static Function NfeCob(aDupl)

Local cString := ""

Local nX := 0
If Len(aDupl)>0
	cString += '<cobr>'
	For nX := 1 To Len(aDupl)
		cString += '<dup>'
		cString += '<Dup>'+ConvType(aDupl[nX][01])+'</Dup>'
		cString += '<dtVenc>'+ConvType(aDupl[nX][02])+'</dtVenc>'
		cString += '<vDup>'+ConvType(aDupl[nX][03],15,2)+'</vDup>'
		cString += '</dup>'
	Next nX
	cString += '</cobr>'
EndIf

Return(cString)

Static Function NfeInfAd(cMsgCli,cMsgFis,aPedido,aExp)

Local cString   := ""
DEFAULT aPedido := {}
DEFAULT aExp	:= {}

/* Estava no fonte padrão... Está com problema a parte de cMsgFis e cMsgCli
cString += '<infAdic>'
cString += '<Cpl>[ContrTSS='+StrZero(Year(ddatabase),4)+'-'+StrZero(Month(ddatabase),2)+'-'+StrZero(Day(ddatabase),2)+'#'+AllTrim(Time())+'#'+AllTrim(SubStr(cUsuario,7,15))+']'

If Len(cMsgFis)>0
cString += ConvType(cMsgFis,Len(cMsgFis))
EndIf
If Len(cMsgFis)>0
cString += '<Fisco>'+ConvType(cMsgCli,Len(cMsgCli))+'</Fisco>'
EndIf
cString += '</Cpl>'
cString += '</infAdic>'
*/
//------------------
/*
cString += '<infAdic>'
If Len(cMsgCli)>0
	cString += '<Cpl>'+ConvType(cMsgCli,Len(cMsgCli))+'</Cpl>'
EndIf
If Len(cMsgFis)>0
	cString += '<Fisco>'+ConvType(cMsgFis,Len(cMsgFis))+'</Fisco>'
EndIf
cString += '</infAdic>'
*/

// Tratamento TAG Exportação integração com EEC Average
If Len(aExp)>0 .And. !Empty(aExp[01])
	cString += '<exporta>'
	cString += '<UFEmbarq>'+ConvType(aExp[01][01][03])+ '</UFEmbarq>'
	cString += '<locembarq>'+ConvType(aExp[01][02][03])+ '</locembarq>'
	cString += '</exporta>'
EndIf

If Len(aPedido)>0
	cString += '<compra>'
	cString += '<nEmp>'+aPedido[01]+'</nEmp>'
	cString += '<Pedido>'+aPedido[02]+'</Pedido>'
	cString += '<Contrato>'+aPedido[03]+'</Contrato>'
	cString += '</compra>'
EndIf

Return(cString)

Static Function ConvType(xValor,nTam,nDec)

Local cNovo := ""
DEFAULT nDec := 0
Do Case
	Case ValType(xValor)=="N"
		If xValor <> 0
			cNovo := AllTrim(Str(xValor,nTam,nDec))
		Else
			cNovo := "0"
		EndIf
	Case ValType(xValor)=="D"
		cNovo := FsDateConv(xValor,"YYYYMMDD")
		cNovo := SubStr(cNovo,1,4)+"-"+SubStr(cNovo,5,2)+"-"+SubStr(cNovo,7)
	Case ValType(xValor)=="C"
		If nTam==Nil
			xValor := AllTrim(xValor)
		EndIf
		DEFAULT nTam := 60
		cNovo := AllTrim(EnCodeUtf8(NoAcento(SubStr(xValor,1,nTam))))
EndCase
Return(cNovo)

Static Function Inverte(uCpo)
Local cRet	:= ""
/*
Local cCpo	:= uCpo
Local cByte	:= ""
Local nAsc	:= 0
Local nI		:= 0
Local aChar	:= {}
Local nDiv	:= 0
*/
cRet	:=	GCifra(Val(uCpo))
/*
Aadd(aChar,	{"0", "9"})
Aadd(aChar,	{"1", "8"})
Aadd(aChar,	{"2", "7"})
Aadd(aChar,	{"3", "6"})
Aadd(aChar,	{"4", "5"})
Aadd(aChar,	{"5", "4"})
Aadd(aChar,	{"6", "3"})
Aadd(aChar,	{"7", "2"})
Aadd(aChar,	{"8", "1"})
Aadd(aChar,	{"9", "0"})

For nI:= 1 to Len(cCpo)
cByte := Upper(Subs(cCpo,nI,1))
If (Asc(cByte) >= 48 .And. Asc(cByte) <= 57) .Or. ;	// 0 a 9
(Asc(cByte) >= 65 .And. Asc(cByte) <= 90) .Or. ;	// A a Z
Empty(cByte)	// " "
nAsc	:= Ascan(aChar,{|x| x[1] == cByte})
If nAsc > 0
cRet := cRet + aChar[nAsc,2]	// Funcao Inverte e chamada pelo rdmake de conversao
EndIf
Else
// Caracteres <> letras e numeros: mantem o caracter
cRet := cRet + cByte
EndIf
Next
*/
Return(cRet)

Static Function NfeTag(cTag,cConteudo)

Local cRetorno := ""
If (!Empty(AllTrim(cConteudo)) .And. IsAlpha(AllTrim(cConteudo))) .Or. Val(AllTrim(cConteudo))<>0
	cRetorno := cTag+AllTrim(cConteudo)+SubStr(cTag,1,1)+"/"+SubStr(cTag,2)
EndIf
Return(cRetorno)

Static Function VldIE(cInsc,lContr)

Local cRet	:=	""
Local nI	:=	1
DEFAULT lContr  :=      .T.
For nI:=1 To Len(cInsc)
	If Isdigit(Subs(cInsc,nI,1)) .Or. IsAlpha(Subs(cInsc,nI,1))
		cRet+=Subs(cInsc,nI,1)
	Endif
Next
cRet := AllTrim(cRet)
If "ISENT"$Upper(cRet)
	cRet := ""
EndIf
If lContr .And. Empty(cRet)
	cRet := "ISENTO"
EndIf
If !lContr
	cRet := ""
EndIf
Return(cRet)


static FUNCTION NoAcento(cString)
Local cChar  := ""
Local nX     := 0
Local nY     := 0
Local cVogal := "aeiouAEIOU"
Local cAgudo := "áéíóú"+"ÁÉÍÓÚ"
Local cCircu := "âêîôû"+"ÂÊÎÔÛ"
Local cTrema := "äëïöü"+"ÄËÏÖÜ"
Local cCrase := "àèìòù"+"ÀÈÌÒÙ"
Local cTio   := "ãõ"
Local cCecid := "çÇ"

For nX:= 1 To Len(cString)
	cChar:=SubStr(cString, nX, 1)
	IF cChar$cAgudo+cCircu+cTrema+cCecid+cTio+cCrase
		nY:= At(cChar,cAgudo)
		If nY > 0
			cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
		EndIf
		nY:= At(cChar,cCircu)
		If nY > 0
			cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
		EndIf
		nY:= At(cChar,cTrema)
		If nY > 0
			cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
		EndIf
		nY:= At(cChar,cCrase)
		If nY > 0
			cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
		EndIf
		nY:= At(cChar,cTio)
		If nY > 0
			cString := StrTran(cString,cChar,SubStr("ao",nY,1))
		EndIf
		nY:= At(cChar,cCecid)
		If nY > 0
			cString := StrTran(cString,cChar,SubStr("cC",nY,1))
		EndIf
	Endif
Next
For nX:=1 To Len(cString)
	cChar:=SubStr(cString, nX, 1)
	If Asc(cChar) < 32 .Or. Asc(cChar) > 123 .Or. cChar $ '&'
		cString:=StrTran(cString,cChar,".")
	Endif
Next nX
cString := _NoTags(cString)
Return cString

/*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Fun‡…o    ³MyGetEnd  ³ Autor ³ Liber De Esteban             ³ Data ³ 19/03/09 ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³ Verifica se o participante e do DF, ou se tem um tipo de endereco ³±±
±±³          ³ que nao se enquadra na regra padrao de preenchimento de endereco  ³±±
±±³          ³ por exemplo: Enderecos de Area Rural (essa verificção e feita     ³±±
±±³          ³ atraves do campo ENDNOT).                                         ³±±
±±³          ³ Caso seja do DF, ou ENDNOT = 'S', somente ira retornar o campo    ³±±
±±³          ³ Endereco (sem numero ou complemento). Caso contrario ira retornar ³±±
±±³          ³ o padrao do FisGetEnd                                             ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Obs.     ³ Esta funcao so pode ser usada quando ha um posicionamento de      ³±±
±±³          ³ registro, pois será verificado o ENDNOT do registro corrente      ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso      ³ SIGAFIS                                                           ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/
Static Function MyGetEnd(cEndereco,cAlias)

Local cCmpEndN	:= SubStr(cAlias,2,2)+"_ENDNOT"
Local cCmpEst	:= SubStr(cAlias,2,2)+"_EST"
Local aRet		:= {"",0,"",""}

//Campo ENDNOT indica que endereco participante mao esta no formato <logradouro>, <numero> <complemento>
//Se tiver com 'S' somente o campo de logradouro sera atualizado (numero sera SN)
If (&(cAlias+"->"+cCmpEst) == "DF") .Or. ((cAlias)->(FieldPos(cCmpEndN)) > 0 .And. &(cAlias+"->"+cCmpEndN) == "1")
	aRet[1] := cEndereco
	aRet[3] := "SN"
Else
	aRet := FisGetEnd(cEndereco)
EndIf

Return aRet


Static Function NFSeIde(aNotaServ,cNatOper,cTipoRPS,cModXml)
Local cString  := ""
Local cRegTrib := "1"
Local cOptSimp := "2" 
Local cIncCult := "1"


If "1"$cModXml //BH - ABRASF
	cString += '<InfRps Id="Rps'+AllTrim(aNotaServ[02])+'">'
	cString += '<IdentificacaoRps>'
	cString += '<Numero>'+ConvType(Val(aNotaServ[02]),15)+'</Numero>'
	cString += '<Serie>'+AllTrim(aNotaServ[01])+'</Serie>'
	cString += '<Tipo>'+cTipoRPS+'</Tipo>'
	cString += '</IdentificacaoRps>'
	cString += '<DataEmissao>'+ConvType(aNotaServ[03])+"T"+Time()+'</DataEmissao>
//	cString += '<DataEmissao>'+ConvType(aNotaServ[03])+"T"+"10:10:00"+'</DataEmissao>
	cString += '<NaturezaOperacao>'+cNatOper+'</NaturezaOperacao>'
	cString += '<RegimeEspecialTributacao>'+cRegTrib+'</RegimeEspecialTributacao>'
	cString += '<OptanteSimplesNacional>'+cOptSimp+'</OptanteSimplesNacional>'
	cString += '<OutrasInformacoes>'+cConServ+'</OutrasInformacoes>'	
	cString += '<IncentivadorCultural>'+cIncCult+'</IncentivadorCultural>'
	cString += '<Status>'+"1"+'</Status>'
	//cString += '<RpsSubstituido>'
	//cString += '<Numero>'+ConvType(Val(aNotaServ[02]),15)+'</Numero>'
	//cString += '<Serie>'+AllTrim(aNotaServ[01])+'</Serie>'
	//cString += '<Tipo>'+cTipoRPS+'</Tipo>'
	//cString += '</RpsSubstituido>'
	
Else//ISSNET
	cString += '<tc:InfRps>'
	cString += '<tc:IdentificacaoRps>'
	cString += '<tc:Numero>'+ConvType(Val(aNotaServ[02]),15)+'</tc:Numero>'
	//cString += '<tc:Serie>'+'8'+'</tc:Serie>'
	cString += '<tc:Serie>'+AllTrim(aNotaServ[01])+'</tc:Serie>'
	cString += '<tc:Tipo>'+cTipoRPS+'</tc:Tipo>'
	cString += '</tc:IdentificacaoRps>'
	cString += '<tc:DataEmissao>'+ConvType(aNotaServ[03])+"T"+Time()+'</tc:DataEmissao> 
//	cString += '<tc:DataEmissao>'+ConvType(aNotaServ[03])+"T"+"10:10:00"+'</tc:DataEmissao> 
	cString += '<tc:NaturezaOperacao>'+cNatOper+'</tc:NaturezaOperacao>'
	cString += '<tc:RegimeEspecialTributacao>'+cRegTrib+'</tc:RegimeEspecialTributacao>'
	cString += '<tc:OptanteSimplesNacional>'+cOptSimp+'</tc:OptanteSimplesNacional>'
	cString += '<tc:IncentivadorCultural>'+cIncCult+'</tc:IncentivadorCultural>'
	cString += '<tc:Status>'+"1"+'</tc:Status>'
	//cString += '<tc:RpsSubstituido>'
	//cString += '<tc:Numero>'+ConvType(Val(aNotaServ[02]),15)+'</tc:Numero>'
	//cString += '<tc:Serie>'+AllTrim(aNotaServ[01])+'</tc:Serie>'
	//cString += '<tc:Tipo>'+cTipoRPS+'</tc:Tipo>'
	//cString += '</tc:RpsSubstituido>'
EndIf
Return( cString )

Static Function NFSeServ(aISSQN,aRet,nDed,nIssRet,cRetIss,cServ,cMunPres,cModXml)
Local cString    := ""
Local nBase      := 0
Local nValLiq    := 0
Local nOutRet    := 0

//Base de Cálculo
nBase      := aISSQN[02]-nDed-aISSQN[06]
//Valor Líquido
nValLiq    := aISSQN[02]-aRet[06]-aISSQN[06]
//Outras retenções
nOutRet    := aRet[06]-aRet[05]-aRet[04]-aRet[03]-aRet[02]-aRet[01]

If nOutRet > 0
	nOutRet:= nOutRet-nIssRet
EndIf


If "1"$cModXml //BH - ABRASF
	
	// ATENÇÃO: Manter esta sequencia para não dar erro de estrutura no XML.
    // Tivemos que retirar a função NfeTag pois alguns campos mesmo não sendo 
    // obrigatorios, deve ir informados.
	cString += '<Servico>'
	cString += '<Valores>'
	cString += '<ValorServicos>'+ConvType(aISSQN[02],15,2)+'</ValorServicos>'
	cString += '<ValorDeducoes>'+ConvType(nDed,15,2)+'</ValorDeducoes>'
	cString += '<ValorPis>'+ConvType(aRet[03],15,2)+'</ValorPis>'
	cString += '<ValorCofins>'+ConvType(aRet[04],15,2)+'</ValorCofins>'
	cString += '<ValorInss>'+ConvType(aRet[05],15,2)+'</ValorInss>'
	cString += '<ValorIr>'+ConvType(aRet[01],15,2)+'</ValorIr>'
	cString += '<ValorCsll>'+ConvType(aRet[02],15,2)+'</ValorCsll>'
	cString += '<IssRetido>'+cRetIss+'</IssRetido>'
	cString += '<ValorIss>'+ConvType(aISSQN[05],15,2)+'</ValorIss>'
	cString += '<OutrasRetencoes>'+ConvType(nOutRet,15,2)+'</OutrasRetencoes>'
	cString += '<BaseCalculo>'+ConvType(nBase,15,2)+'</BaseCalculo>'
//	cString += '<Aliquota>'+ConvType(aISSQN[04],5,2)+'</Aliquota>'
	cString += '<Aliquota>'+ConvType(nValAliq,5,2)+'</Aliquota>'
	cString += '<ValorLiquidoNfse>'+ConvType(nValLiq,15,2)+'</ValorLiquidoNfse>'
	cString += '<ValorIssRetido>'+ConvType(nIssRet,15,2)+'</ValorIssRetido>'
	cString += '<DescontoCondicionado>'+ConvType(0,15,2)+'</DescontoCondicionado>'
	cString += '<DescontoIncondicionado>'+ConvType((aISSQN[06]),15,2)+'</DescontoIncondicionado>'
	//cString += NfeTag('<ValorDeducoes>',ConvType(nDed,15,2))
	//cString += NfeTag('<ValorPis>',ConvType(aRet[03],15,2))	
		//cString += NfeTag('<ValorCofins>',ConvType(aRet[04],15,2))
	//cString += NfeTag('<ValorInss>',ConvType(aRet[05],15,2))
	//cString += NfeTag('<ValorIr>',ConvType(aRet[01],15,2))
	//cString += NfeTag('<ValorCsll>',ConvType(aRet[02],15,2))	
//	cString += NfeTag('<ValorIss>',ConvType((aISSQN[05]),15,2))
//	cString += NfeTag('<ValorIssRetido>',ConvType(nIssRet,15,2))
// cString += NfeTag('<OutrasRetencoes>',ConvType(nOutRet,15,2))	
//	cString += NfeTag('<Aliquota>',ConvType(aISSQN[04=],5,2))
//cString += NfeTag('<ValorLiquidoNfse>',ConvType(nValLiq,15,2))

	cString += '</Valores>'
	//cString += '<ItemListaServico>'+ConvType(StrTran(aISSQN[01],".",""),4)+'</ItemListaServico>'
	cString += '<ItemListaServico>'+ConvType(aISSQN[01],5)+'</ItemListaServico>'
	//cString += '<CodigoCnae>'+ConvType(aISSQN[03],7)+'</CodigoCnae>'
	//cString += NfeTag('<CodigoCnae>',ConvType(aISSQN[03],7)) // ALTERADO 14/07/2011
	cString += NfeTag('<CodigoCnae>',"") // ENVIANDO EM BRANCO TESTE
	//cString += '<CodigoTributacaoMunicipio>'+'710'+'</CodigoTributacaoMunicipio>'
	cString += '<CodigoTributacaoMunicipio>'+ConvType(aISSQN[07],20)+'</CodigoTributacaoMunicipio>'
	cString += '<Discriminacao>{'+cServ+'}</Discriminacao>'
//	cString += '<CodigoMunicipio>'+ConvType(Alltrim(SM0->M0_CODMUN),7)+'</CodigoMunicipio>'
	cString += '<CodigoMunicipio>'+ConvType(Alltrim(cCodPrest),7)+'</CodigoMunicipio>'
	cString += '</Servico>'
	
Else //ISSNET
	cString += '<tc:Servico>'
	cString += '<tc:Valores>'
	cString += '<tc:ValorServicos>'+ConvType(aISSQN[02],15,2)+'</tc:ValorServicos>'
	cString += NfeTag('<tc:ValorDeducoes>',ConvType(nDed,15,2))
	cString += NfeTag('<tc:ValorPis>',ConvType(aRet[03],15,2))
	cString += NfeTag('<tc:ValorCofins>',ConvType(aRet[04],15,2))
	cString += NfeTag('<tc:ValorInss>',ConvType(aRet[05],15,2))
	cString += NfeTag('<tc:ValorIr>',ConvType(aRet[01],15,2))
	cString += NfeTag('<tc:ValorCsll>',ConvType(aRet[02],15,2))
	cString += '<tc:IssRetido>'+cRetIss+'</tc:IssRetido>'
	cString += NfeTag('<tc:ValorIss>',ConvType((aISSQN[05]),15,2))
	cString += NfeTag('<tc:ValorIssRetido>',ConvType(nIssRet,15,2))
	cString += NfeTag('<tc:OutrasRetencoes>',ConvType(nOutRet,15,2))
	cString += '<tc:BaseCalculo>'+ConvType(nBase,15,2)+'</tc:BaseCalculo>'
	cString += NfeTag('<tc:Aliquota>',ConvType(nValAliq,5,2))
	cString += NfeTag('<tc:ValorLiquidoNfse>',ConvType(nValLiq,15,2))
	cString += '<tc:DescontoIncondicionado>'+ConvType((aISSQN[06]),15,2)+'</tc:DescontoIncondicionado>'
	cString += '<tc:DescontoCondicionado>0</tc:DescontoCondicionado>'
	cString += '</tc:Valores>'
	//cString += '<tc:ItemListaServico>'+ConvType(StrTran(aISSQN[01],".",""),4)+'</tc:ItemListaServico>'
	cString += '<tc:ItemListaServico>'+ConvType(aISSQN[01],1)+'</tc:ItemListaServico>'
	//cString += NfeTag('<tc:CodigoCnae>',ConvType(aISSQN[03],7)) ALTERADO EM 14/07/2011.
	cString += NfeTag('<CodigoCnae>',"") // ENVIANDO EM BRANCO TESTE	
	
	//cString += '<tc:CodigoTributacaoMunicipio>'+'710'+'</tc:CodigoTributacaoMunicipio>'
	cString += '<tc:CodigoTributacaoMunicipio>'+ConvType(aISSQN[07],20)+'</tc:CodigoTributacaoMunicipio>'
	cString += '<tc:Discriminacao>{'+ConvType(cServ,2000)+'}</tc:Discriminacao>'
	cString += '<tc:MunicipioPrestacaoServico>'+ConvType(Alltrim(cCodPrest),7)+'</tc:MunicipioPrestacaoServico>'
//	cString += '<tc:MunicipioPrestacaoServico>'+ConvType(Alltrim(SM0->M0_CODMUN),7)+'</tc:MunicipioPrestacaoServico>'
	//cString += '<tc:MunicipioPrestacaoServico>999</tc:MunicipioPrestacaoServico>'
	cString += '</tc:Servico>'
EndIf
Return(cString)

Static Function NFSePrest(cModXml)
Local cString    := ""
If "1"$cModXml //BH - ABRASF
	cString +='<Prestador>'
	cString += '<Cnpj>'+SM0->M0_CGC+'</Cnpj>'
	cString += NfeTag('<InscricaoMunicipal>',ConvType(SM0->M0_INSCM))
	cString +='</Prestador>'
Else //ISSNET
	cString +='<tc:Prestador>'
	cString +='<tc:CpfCnpj>'
	cString += '<tc:Cnpj>'+SM0->M0_CGC+'</tc:Cnpj>'
	cString +='</tc:CpfCnpj>'
	cString += NfeTag('<tc:InscricaoMunicipal>',ConvType(SM0->M0_INSCM))
	cString +='</tc:Prestador>'
EndIf
Return(cString)

Static Function NFSeTom(aDest,cModXml,cMunPres)
Local cCPFCNPJ :=""
Local cInscMun :=""
Local cString  :=""

//Identifica Tipo
If RetPessoa(AllTrim(aDest[01]))=="J"
	cCPFCNPJ:="2"
Else
	cCPFCNPJ:="1"
EndIf
//Identifica Inscricao
If AllTrim(cMunPres)==AllTrim(SM0->M0_CODMUN)
	cInscMun:=aDest[11]
EndIf

If "1"$cModXml //BH - ABRASF
	cString +='<Tomador>'
	cString +='<IdentificacaoTomador>'
	//Estrangeiro não manda a tag de CPFCNPJ
	If !"EX"$aDest[08]
		cString +='<CpfCnpj>'
		If "2"$cCPFCNPJ
			cString += NfeTag('<Cnpj>',ConvType(aDest[01]))
		Else
			cString += NfeTag('<Cpf>',ConvType(aDest[01]))
		EndIf
		cString +='</CpfCnpj>'
	EndIf
	cString += NfeTag('<InscricaoMunicipal>',ConvType(cInscMun))
	cString +='</IdentificacaoTomador>'
	cString += NfeTag('<RazaoSocial>',ConvType(aDest[02],115))
	
	cString +='<Endereco>'
	cString += NfeTag('<Endereco>',ConvType(aDest[03],125))
	cString += NfeTag('<Numero>',ConvType(aDest[04],10))
	cString += NfeTag('<Complemento>',ConvType(aDest[05],60))
	cString += NfeTag('<Bairro>',ConvType(aDest[06],60))
	cString += NfeTag('<CodigoMunicipio>',ConvType(aUF[aScan(aUF,{|x| x[1] == aDest[08]})][02]+aDest[07]))
	cString += NfeTag('<Uf>',ConvType(aDest[08]))
	cString += NfeTag('<Cep>',ConvType(aDest[09]))
	cString +='</Endereco>'
	
	cString +='<Contato>'
	cString += NfeTag('<Telefone>','00000000')
	cString += NfeTag('<Email>',ConvType(aDest[12],80))

//	cString += NfeTag('<Telefone>',AllTrim(ConvType(FisGetTel(aDest[10])[3],11)))
//	cString += NfeTag('<Email>',ConvType(aDest[12],80))
	cString +='</Contato>'
	cString +='</Tomador>'
	
	//cString +='<Intermediario>'
	//cString += '<RazaoSocial>'+'</RazaoSocial>'
	//cString +='<CpfCnpj>'
	//cString += '<Cpf>'+'</Cpf>'
	//cString += '<Cnpj>'+'</Cnpj>'
	//cString +='</CpfCnpj>'
	//cString += '<InscricaoMunicipal>'+'</InscricaoMunicipal>'
	//cString +='</Intermediario>'
	
	//cString +='<Construcao>'
	//cString += '<CodigoObra>'+'</CodigoObra>'
	//cString += '<Art>'+'</Art>'
	//cString +='</Construcao>'
	cString +='</InfRps>'
	
Else //ISSNET
	cString +='<tc:Tomador>'
	cString +='<tc:IdentificacaoTomador>'
	cString +='<tc:CpfCnpj>'
	If "2"$cCPFCNPJ
		cString += NfeTag('<tc:Cnpj>',ConvType(aDest[01]))
	Else
		cString += NfeTag('<tc:Cpf>',ConvType(aDest[01]))
	EndIf
	cString +='</tc:CpfCnpj>'
	cString += NfeTag('<tc:InscricaoMunicipal>',ConvType(cInscMun))
	cString +='</tc:IdentificacaoTomador>'
	cString += NfeTag('<tc:RazaoSocial>',ConvType(aDest[02],115))
	
	cString +='<tc:Endereco>'
	cString += NfeTag('<tc:Endereco>',ConvType(aDest[03],125))
	cString += NfeTag('<tc:Numero>',ConvType(aDest[04],10))
	cString += NfeTag('<tc:Complemento>',ConvType(aDest[05],60))
	cString += NfeTag('<tc:Bairro>',ConvType(aDest[06],60))
	If "EX"$aDest[08]
		cString += NfeTag('<tc:Cidade>','99999')
	Else
		cString += NfeTag('<tc:Cidade>',ConvType(aUF[aScan(aUF,{|x| x[1] == aDest[08]})][02]+aDest[07]))
	EndIf
	
	cString += NfeTag('<tc:Estado>',ConvType(aDest[08]))
	cString += NfeTag('<tc:Cep>',ConvType(aDest[09]))
	cString +='</tc:Endereco>'
	
	cString +='<tc:Contato>'
	cString += NfeTag('<tc:Telefone>',ConvType(aDest[10],11))
	cString += NfeTag('<tc:Email>',ConvType(aDest[12],80))
	cString +='</tc:Contato>'
	cString +='</tc:Tomador>'
	
	//cString +='<tc:Intermediario>'
	//cString += '<tc:RazaoSocial>'+'</tc:RazaoSocial>'
	//cString +='<tc:CpfCnpj>'
	//cString += '<tc:Cpf>'+'</tc:Cpf>'
	//cString += '<tc:Cnpj>'+'</tc:Cnpj>'
	//cString +='</tc:CpfCnpj>'
	//cString += '<tc:InscricaoMunicipal>'+'</tc:InscricaoMunicipal>'
	//cString +='</tc:Intermediario>'
	
	//cString +='<tc:Construcao>'
	//cString += '<tc:CodigoObra>'+'</tc:CodigoObra>'
	//cString += '<tc:Art>'+'</tc:Art>'
	//cString +='</tc:Construcao>'
	cString +='</tc:InfRps>'
EndIf
Return(cString)
/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Fun‡„o    ³SPEDRastro³ Autor ³ Luana Ferrari         ³ Data ³13/10/2009³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡„o ³Funcao criada para retornar para matxfis a informacao da UF ³±±
±±³          ³e aliquota da nota original de entrada quando o produto pos-³±±
±±³          ³suir rastro por sublote.                                    ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Sintaxe   ³SPEDRastro                                                  ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Retorno   ³Retorna													  ³±±
±±³ 		 |UF Original da nota de entrada                              ³±±
±±³ 		 |Aliquota Original da nota de entrada                        ³±±
±±³ 		 |Quantidade proporcional da venda referente ao lote          ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso      ³                                                            ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
Static Function SPEDRastro(cNumLote,cLoteCtl,cProduto,cBaseIcm,cValICM)
Local cSeek	     := ""
Local cSeek1     := ""

dbSelectArea("SB8")
dbSetOrder(2)
If MsSeek(xFilial("SB8")+cNumLote+cLoteCtl+cProduto)
	cSeek:= SB8->B8_CLIFOR+SB8->B8_LOJA+SB8->B8_SERIE+SB8->B8_DOC
	cSeek1:=cProduto+SB8->B8_DOC+SB8->B8_SERIE+SB8->B8_CLIFOR+SB8->B8_LOJA
EndIf
dbSelectArea("SD1")
dbSetOrder(2)

If MsSeek(xFilial("SD1")+cSeek1)
	If !Empty (SD1->D1_BASNDES) .AND. !Empty (SD1->D1_ICMNDES)
		cBaseIcm   := (SD1->D1_BASNDES / SB8->B8_QTDORI)
		cValICM    := (SD1->D1_ICMNDES / SB8->B8_QTDORI)
	Endif
EndIf

If Len (cSeek)>0 .AND. Empty (cBaseIcm) .AND. Empty (cValICM)
	dbSelectArea("SFT")
	dbSetOrder(4)
	If MsSeek(xFilial("SFT")+"E" + cSeek)
		
		cBaseIcm   := (SFT->FT_BASERET / SB8->B8_QTDORI)
		cValICM    := (SFT->FT_ICMSRET / SB8->B8_QTDORI)
		
	EndIf
EndIf
Return()


/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma  ³QbLin     ºAutor  ³TSC217 - Gustavo    º Data ³  24/03/10   º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍ¹±±
±±ºDesc.     ³ Quebra Linha nas informações complementares                º±±
±±º          ³ Específico para Back                                       º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¹±±
±±ºUso       ³ AP                                                         º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/

// Recebe:  _cTexto = Texto a ser impresso
// Retorna: _nSpace = diferenca de espaço
Static Function QbLin(_cTexto)
********************************

// Local para calculo
Local _nSpace := 0

// Verifica os espacos para tratamento do tamanho
While !Empty(_cTexto)
	_nSpace := Len(_cTexto)
	_nSpace := _nSpace - MAXMENLIN
	_cTexto := SubStr(_cTexto,MAXMENLIN+1)
EndDo

If _nSpace < 0
	_nSpace := _nSpace*(-1)
EndIf

Return(_nSpace)

// Função para montar as mensagens dos dados adicionais
// na nota fiscal de servico
Static Function Mensagens()
***************************

Local _aArea := GetArea()

SZ2->( dbSetOrder(1) )


// Zera as mensagens
aMensagem := {}
cMenssagem := ""
xEmpresa  := {}
npIRRF := 0
npINSS := 0
cDUnica:= ''
cDFatura := ''
nPCREAJ := 0

// ********************************************************* //
// ZERA VARIAVEIS DE IMPOSTOS PARA IMPRESSAO NAS OBSERVACOES //
// ********************************************************* //

nISS506_1 :=  0
nISS506_2 :=  0
nISS506_N :=  0
nISS505_N :=  0
nISS506_S :=  0
nISS500_S :=  0
nINSS_NCal:=  0
nINSS_Cal :=  0
lLiminar  := .f.
cFilPos   := ""
nIRRF   := 0
nINSS   := 0
nISS    := 0
nISSRET := 0
nFat    := 0
nNotaF  := 0
nCOFINS := 0
nCSLL   := 0
nPIS    := 0
nTOTDED := 0
cMeniss := .f.

xCliente := {}

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Coleta de dados da empresa                                       ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ncodEmp := SM0->M0_CODIGO
nRegEmp := SM0->( recno() )

SM0->( dbGotop() )
lAchou := .F.

While !SM0->( eof() ) .AND. !lAchou
	
	IF SM0->M0_CODIGO == ncodEmp .and. SM0->M0_CODFIL == SF2->F2_FILIAL
		
		lAchou := .T.
		
	ELSE
		
		SM0->( dbSkip() )
		
	ENDIF
	
Enddo

cMenAut := ''

if lAchou
	AADD(xEmpresa,SM0->M0_NOMECOM) // [1] NOME     DA EMPRESA
	AADD(xEmpresa,SM0->M0_CGC)     // [2] CGC      DA EMPRESA
	AADD(xEmpresa,SM0->M0_CODMUN)  // [3] INSC MUN DA EMPRESA
	AADD(xEmpresa,SM0->M0_ENDENT)  // [4] ENDERECO DA EMPRESA
	AADD(xEmpresa,SM0->M0_BAIRENT) // [5] BAIRRO   DA EMPRESA
	AADD(xEmpresa,SM0->M0_CIDENT)  // [6] CIDADE   DA EMPRESA
	AADD(xEmpresa,SM0->M0_ESTENT)  // [7] ESTADO   DA EMPRESA
	AADD(xEmpresa,SM0->M0_CEPENT)  // [8] CEP      DA EMPRESA
	AADD(xEmpresa,SM0->M0_TEL)     // [9] TELEFONE DA EMPRESA
	AADD(xEmpresa,SM0->M0_CODIGO)  // [10] CODIGO DA EMPRESA
	AADD(xEmpresa,SM0->M0_CODFIL)  // [11] CODIGO DA FILIAL
	
	// Retirado 
	//cMenAut := 'SAC 0800-7048788'
	
EndIF

SM0->( dbGoto(nRegEmp) )


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Coleta de dados do cliente                                   ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
IF SA1->( DBSEEK( XFILIAL('SA1')+SF2->F2_CLIENTE+SF2->F2_LOJA ) )
	AADD(xCliente,SF2->F2_CLIENTE)           // [01]  CODIGO    DO CLIENTE
	AADD(xCliente,SF2->F2_LOJA)              // [02]  LOJA      DO CLIENTE
	AADD(xCliente,SA1->A1_NOME)              // [03]  NOME      DO CLIENTE
	AADD(xCliente,SA1->A1_END)               // [04]  ENDERECO  DO CLIENTE
	AADD(xCliente,SA1->A1_BAIRRO)            // [05]  BAIRRO    DO CLIENTE
	AADD(xCliente,SA1->A1_MUN)               // [06]  MUNICIPIO DO CLIENTE
	AADD(xCliente,SA1->A1_EST)               // [07]  ESTADO    DO CLIENTE
	AADD(xCliente,SA1->A1_CEP)               // [08]  CEP       DO CLIENTE
	AADD(xCliente,SA1->A1_CGC)               // [09]  CGC       DO CLIENTE
	AADD(xCliente,SA1->A1_INSCR)             // [10]  INSC EST  DO CLIENTE
	AADD(xCliente,SPACE(03))                 // [11]  CONTRATO  DO CLIENTE
	AADD(xCliente,SPACE(01))                 // [12]  TIPO CTR  DO CLIENTE
	AADD(xCliente,SPACE(02))                 // [13]  FILIAL SV DO CLIENTE
	AADD(xCliente,alltrim(SA1->A1_ENDCOB)+' '+alltrim(SA1->A1_MUNC)+'-'+SA1->A1_ESTC+' '+Transform(SA1->A1_CEPC,'@R 99999-999') )        // [14]  PRACA DE PAGAMENTO
	AADD(xCliente,SPACE(06))                 // [15]  PEDIDO
	
	AADD(xCliente,SA1->A1_ENDCOB)            // [16]  ENDERECOC  DO CLIENTE
	AADD(xCliente,SA1->A1_BAIRROC)           // [17]  BAIRROC    DO CLIENTE
	AADD(xCliente,SA1->A1_MUNC)              // [18]  MUNICIPIOC DO CLIENTE
	AADD(xCliente,SA1->A1_ESTC)              // [19]  ESTADOC    DO CLIENTE
	AADD(xCliente,SA1->A1_CEPC)              // [20]  CEPC       DO CLIENTE
	
	AADD(xCliente,SA1->A1_ENDENT)            // [21]  ENDERECOE  DO CLIENTE
	AADD(xCliente,SA1->A1_BAIRROE)           // [22]  BAIRROE    DO CLIENTE
	AADD(xCliente,SA1->A1_MUNE)              // [23]  MUNICIPIOE DO CLIENTE
	AADD(xCliente,SA1->A1_ESTE)              // [24]  ESTADOE    DO CLIENTE
	AADD(xCliente,SA1->A1_CEPE)              // [25]  CEPE       DO CLIENTE
	AADD(xCliente,SA1->A1_METR)              // [26]  MEDIA DE ATRASO
	AADD(xCliente,SA1->A1_PESSOA)            // [27]  PESSOA F=FISICA / J=JURIDICA
	AADD(xCliente,SA1->A1_BCODC)             // [28]  BANCO DEBITO EM CONTA
	AADD(xCliente,SA1->A1_AGDC)              // [29]  AGENCIA DEBITO EM CONTA
	AADD(xCliente,SA1->A1_CONTADC)           // [30]  CONTA DEBITO EM CONTA
	AADD(xCliente,SA1->A1_NREDUZ )           // [31]  FANTASIA
	AADD(xCliente,SPACE(01) )          		 // [32]  TIPO DE ESTABELECIMENTO C= COMERCIAL / R= RESIDENCIAL
	
ELSE
	AADD(xCliente,SPACE(06))                 // [01]  CODIGO    DO CLIENTE
	AADD(xCliente,SPACE(02))                 // [02]  LOJA      DO CLIENTE
	AADD(xCliente,SPACE(40))                 // [03]  NOME      DO CLIENTE
	AADD(xCliente,SPACE(40))                 // [04]  ENDERECO  DO CLIENTE
	AADD(xCliente,SPACE(30))                 // [05]  BAIRRO    DO CLIENTE
	AADD(xCliente,SPACE(15))                 // [06]  MUNICIPIO DO CLIENTE
	AADD(xCliente,SPACE(02))                 // [07]  ESTADO    DO CLIENTE
	AADD(xCliente,SPACE(08))                 // [08]  CEP       DO CLIENTE
	AADD(xCliente,SPACE(14))                 // [09]  CGC       DO CLIENTE
	AADD(xCliente,SPACE(18))                 // [10]  INSC EST  DO CLIENTE
	AADD(xCliente,SPACE(03))                 // [11]  CONTRATO  DO CLIENTE
	AADD(xCliente,SPACE(01))                 // [12]  TIPO CTR  DO CLIENTE
	AADD(xCliente,SPACE(02))                 // [13]  FILIAL SV DO CLIENTE
	AADD(xCliente,SPACE(67))                 // [14]  PRACA DE PAGAMENTO
	AADD(xCliente,SPACE(06))                 // [15]
	
	AADD(xCliente,SPACE(40))                 // [16]  ENDERECOC  DO CLIENTE
	AADD(xCliente,SPACE(20))                 // [17]  BAIRROC    DO CLIENTE
	AADD(xCliente,SPACE(15))                 // [18]  MUNICIPIOC DO CLIENTE
	AADD(xCliente,SPACE(02))                 // [19]  ESTADOC    DO CLIENTE
	AADD(xCliente,SPACE(08))                 // [20]  CEPC       DO CLIENTE
	
	AADD(xCliente,SPACE(40))                 // [21]  ENDERECOE  DO CLIENTE
	AADD(xCliente,SPACE(20))                 // [22]  BAIRROE    DO CLIENTE
	AADD(xCliente,SPACE(15))                 // [23]  MUNICIPIOE DO CLIENTE
	AADD(xCliente,SPACE(02))                 // [24]  ESTADOE    DO CLIENTE
	AADD(xCliente,SPACE(08))                 // [25]  CEPE       DO CLIENTE
	AADD(xCliente,0)                         // [26]  MEDIA DE ATRASO
	AADD(xCliente,"")            // [27]  PESSOA F=FISICA / J=JURIDICA
	AADD(xCliente,SPACE(03))                 // [28]  BANCO DEBITO EM CONTA
	AADD(xCliente,SPACE(05))                 // [29]  AGENCIA DEBITO EM CONTA
	AADD(xCliente,SPACE(10))                 // [30]  CONTA DEBITO EM CONTA
	AADD(xCliente,SPACE(1))                  // [31]  FANTASIA
	AADD(xCliente,SPACE(01) )          		 // [32]  TIPO DE ESTABELECIMENTO C= COMERCIAL / R= RESIDENCIAL
	
	
ENDIF


SC5->( dbSetOrder(5) )
SC5->( dbGoTop() )
IF SC5->( DBSEEK( SF2->F2_FILIAL + SF2->F2_DOC + SF2->F2_SERIE,.T. ) )
	
	AADD(aMensagem,SC5->C5_MENNOTA)                        // [4] PERIODO
	
	xCliente[15] := SC5->C5_NUM
	xCliente[11] := SC5->C5_CONTRAT
	xCliente[12] := SC5->C5_TCTR
	
	
	IF SZ2->( DBSEEK( XFILIAL('SZ2')+SC5->C5_TCTR+SC5->C5_CONTRAT ) )
		
		xCliente[13] := SZ2->Z2_FILSERV
		
		SE1->( DbGoTop() )
		SE1->(DBSETORDER(1))
		SE1->( DBSEEK( XFILIAL('SE1')+SF2->F2_SERIE+SF2->F2_DOC ) )
		
		xVencto := ""
		
		IF SE1->( FOUND())
			While (SE1->E1_PREFIXO == SF2->F2_SERIE) .AND. (SE1->E1_NUM == SF2->F2_DOC) .AND. (!SE1->(Eof()))
				
				DO CASE
					Case Alltrim(SE1->E1_TIPO) == 'AB-'
						// NAO SERAO CONSIDERADOS ABATIMENTOS DE PARCELA 1
						//If ALLTRIM(SE1->E1_PARCELA) <> "1"
						nIssRet += SE1->E1_VALOR
						//EndIf
					Case Alltrim(SE1->E1_TIPO) == 'IR-'
						nIRRF += SE1->E1_VALOR
					Case Alltrim(SE1->E1_TIPO) == 'IN-'
						nINSS += SE1->E1_VALOR
					Case Alltrim(SE1->E1_TIPO) == 'CF-'
						nCOFINS += SE1->E1_VALOR
					Case Alltrim(SE1->E1_TIPO) == 'PI-'
						nPIS += SE1->E1_VALOR
					Case Alltrim(SE1->E1_TIPO) == 'CS-'
						nCSLL += SE1->E1_VALOR
					Case Alltrim(SE1->E1_TIPO) == 'NF'
						nFat       += SE1->E1_SALDO
						nNotaF     += SE1->E1_VALOR
						
						// Vencimento da Fatura
						xVencto    := dtoc(SE1->E1_VENCTO)
						
						// ARMAZENA VALORES DE MULTAS E JUROS
						nMulta := SE1->E1_CMULTA
						nJuros := SE1->E1_CJUROS
						
				ENDCASE
				SE1->( DbSkip())
			Enddo
			
		EndIF
		nTOTDED := nCOFINS + nCSLL + nPIS
		
		// Controle para a mensagem de vencimento
		// Se for apresentação escreve apresentacao, senão
		// mostra o vencimento da fatura
		IF SZ2->Z2_TDVENCT == '1'
			xVencto := 'Apresentacao'
		EndIf
		cDUnica := SZ2->Z2_DUNICA
		cDFatura := SZ2->Z2_DFATURA
			
	
		
		// Atualiza a variavel global do ISS Retido
		nIssRetBC := nIssRet
		
		SC6->(DBSETORDER(1))
		SC6->(DBGOTOP())
		SC6->( DBSEEK( SD2->D2_FILIAL + SD2->D2_PEDIDO + SD2->D2_ITEMPV + SD2->D2_COD ,.T. ) )
		
		IF SC6->(FOUND())
			SC5->(DBSETORDER(1))
			SC5->(DBGOTOP())
			SC5->( DBSEEK( XFILIAL('SC5') + SD2->D2_PEDIDO ,.T. ) )
			IF SC5->(FOUND())
				
				SZ4->(dbsetorder(1))
				SZ4->(DBGOTOP())
				SZ4->( DBSEEK( XFILIAL('SZ4') + SC5->C5_TCTR + SC5->C5_CONTRAT ) )
				
				WHILE !SZ4->(EOF()) .AND. SZ4->Z4_FILIAL == XFILIAL('SZ4') .AND. SZ4->Z4_TCTR==SC5->C5_TCTR .AND. SZ4->Z4_CONTRAT ==SC5->C5_CONTRAT
					
					IF (SZ4->Z4_ITEM == SC6->C6_ITPOSTO) .AND. (SZ4->Z4_POSTO == SC6->C6_POSTO)
						
						If alltrim(Posicione("SZ3",1,xfilial("SZ3")+SZ4->Z4_TCTR+SZ4->Z4_CONTRAT+SZ4->Z4_POSTO,"Z3_CIDADE")) $ "007,015"
							cFilPos := alltrim(Posicione("SZ3",1,xfilial("SZ3")+SZ4->Z4_TCTR+SZ4->Z4_CONTRAT+SZ4->Z4_POSTO,"Z3_CIDADE"))
						EndIf
						
						cCidade := SUBSTR(ALLTRIM(SZ4->Z4_PRODUTO),6,3)
						
						dbselectarea("SZC")
						SZC->(dbsetorder(1))
						If SZC->(dbseek(xfilial("SZC")+cCidade))
							If SZC->ZC_LIMINAR = 'S'
								lLiminar := .t.
							Else
								lLiminar := .f.
							EndIf
						EndIf
						
					ENDIF
					
					SZ4->(DBSKIP())
				ENDDO
				
				// ********************************************************* //
				// GUARDA VALORES DE IMPOSTOS PARA IMPRESSAO NAS OBSERVACOES //
				// ********************************************************* //
				
				If lLiminar // CIDADES COM LIMINARES DE ISS
					
					If SD2->D2_TES $ "506" .and. (substr(SD2->D2_COD,1,4) <> "0304")
						nISS506_1 :=  nISS506_1 + SD2->D2_TOTAL  // SOMA DE TODOS OS ITENS QUE TEM TES 506, COM EXCECAO DA FAMILIA 0304
					EndIf
					
					If SD2->D2_TES $ "506" .and. (substr(SD2->D2_COD,1,4) == "0304")
						nISS506_2 :=  nISS506_2 + SD2->D2_TOTAL  // SOMA DE TODOS OS ITENS QUE TEM TES 506, SOMENTE DA FAMILIA 0304
					EndIf
					
					If !(SD2->D2_TES $ "506")
						nISS506_N :=  nISS506_N + SD2->D2_TOTAL  // SOMA DE TODOS OS ITENS COM TES DIFERENTE DE 506
					EndIf
					
					If (SD2->D2_TES $ "505,518")
						nISS505_N :=  nISS505_N + SD2->D2_TOTAL  // SOMA DE TODOS OS ITENS COM TES IGUAIS A 505 OU 518
					EndIf
					
					If (SD2->D2_TES $ "506")
						nISS506_S :=  nISS506_S + SD2->D2_TOTAL  // SOMA DE TODOS OS ITENS COM TES IGUAL DE 506
					EndIf
				Else
					nISS500_S :=  nISS500_S + SD2->D2_TOTAL  // SOMA DE TODOS OS ITENS DE CIDADES SEM LIMINAR
				EndIf
				
				
			EndIf
			
		EndIF
		
		
		cMenssagem := 'Ref.: P'+xCliente[15] +'/C'+xCliente[01] + '/' +xCliente[02] + '/T'+xCliente[12] + '/' + xCliente[11] + '/F'+xCliente[13]
		AADD(aMensagem,cMenssagem)
		
		cMenssagem := 'Pca de Pgto: '+xCliente[14]
		AADD(aMensagem,cMenssagem)
		cMenssagem := ""
		
		AADD(aMensagem,alltrim(SZ2->Z2_MEM1))      // [5] MENSAGEM 1
		AADD(aMensagem,ALLTRIM(SZ2->Z2_MEM2))      // [6] MENSAGEM 2
		
		xMontante := {}
		aadd(xMontante,{IF( LEN(ALLTRIM(SZ2->Z2_MONTA))>0,SZ2->Z2_MONTA,'MONTANTE A'),0})
		aadd(xMontante,{IF( LEN(ALLTRIM(SZ2->Z2_MONTB))>0,SZ2->Z2_MONTB,'MONTANTE B'),0})
		aadd(xMontante,{IF( LEN(ALLTRIM(SZ2->Z2_MONTC))>0,SZ2->Z2_MONTC,'MONTANTE C'),0})
		
		
		IF SED->( DBSEEK( XFILIAL('SED')+SC5->C5_NATUREZ ) )
			npIRRF := SED->ED_PERCIRF
			npINSS := SED->ED_PERCINS
		ENDIF
		
		
		IF nINSS > 0
			//cMenssagem := 'Retencao para seguridade social de R$'+Alltrim(Transform(nINSS,'@R 999,999.99'))
		ENDIF
		
		AADD(aMensagem,cMenssagem)                                // [7] INSS
		
		cMenssagem := ''
		IF Substr(SC5->C5_NATUREZ,1,7) $ "199105 ,199105B"
			// cMenssagem := 'Retencao de '+ Alltrim(Transform(npIRRF,'@R 99.99'))+'%'+' ref. IRRF lei 9430 de 27/12/1996 art. 64 no valor de R$'+Alltrim(Transform(nIRRF,'@R 999,999.99'))
		ELSEIF nIRRF > 0 .AND. Substr(SC5->C5_NATUREZ,1,7) <> "199105A"
			//cMenssagem := 'Retencao de '+ Alltrim(Transform(npIRRF,'@R 99.99'))+'%'+' ref. IRRF lei 7713 de 22/12/1988 no valor de R$'+Alltrim(Transform(nIRRF,'@R 999,999.99'))
		ENDIF                                                     // [8] IRRF
		
		AADD(aMensagem,cMenssagem)
		cMenssagem := ''
		
		IF nISSRET > 0
			DO CASE
				CASE xEmpresa[11] = '02'
					//cMenssagem := 'ISS Conforme decreto 7161 que reg. lei municipal 352 de 04/03/02  R$'+Alltrim(Transform(nISSRET,'@R 999,999.99'))
				CASE xEmpresa[11] = '10'
					//cMenssagem := 'ISS Retido conforme lei complementar NR 175  R$'+Alltrim(Transform(nISSRET,'@R 999,999.99'))
				CASE xEmpresa[11] = '24'
					//cMenssagem := 'ISS Conforme lei municipal 1619/91 artigos 230 e 231  R$'+Alltrim(Transform(nISSRET,'@R 999,999.99'))
				CASE xEmpresa[11] = '15'
					If SM0->M0_CODIGO == '01'
						//cMenssagem := 'ISS retido R$'+Alltrim(Transform(nISSRET,'@R 999,999.99')) //+ "7.10 - Prestacao de Servicos"
					Else
						//cMenssagem := 'ISS retido R$'+Alltrim(Transform(nISSRET,'@R 999,999.99')) //+ "11.02 - Prestacao de Servicos"
					EndIf
				OTHERWISE
					//cMenssagem := 'ISS retido R$'+Alltrim(Transform(nISSRET,'@R 999,999.99'))
			ENDCASE
		ENDIF
		
		AADD(aMensagem,cMenssagem)                                // [9] ISS
		
		cMenssagem := ''
		
		
		IF xMontante[1,2]>0                                       // [11] MONTANTE A
			AADD(aMensagem,xMontante[1,1]+' R$'+Alltrim(Transform(xMontante[1,2],'@R 999,999.99')))
		ENDIF
		IF xMontante[2,2]>0                                       // [12] MONTANTE B
			AADD(aMensagem,xMontante[2,1]+' R$'+Alltrim(Transform(xMontante[2,2],'@R 999,999.99')))
		ENDIF
		IF xMontante[3,2]>0                                       // [13] MONTANTE C
			AADD(aMensagem,xMontante[3,1]+' R$'+Alltrim(Transform(xMontante[3,2],'@R 999,999.99')))
		ENDIF
		
		cMenssagem := ''
		IF Substr(SC5->C5_NATUREZ,1,7) $ "199105A"
			//cMenssagem := 'Retencao IRRF/Cofins/Pis/Pasep/Csll - cfme IN/SRF nr.480 - art.1.paragrafo 6. R$'+Alltrim(Transform((nTOTDED + nIRRF),'@R 999,999.99'))
		ELSEIF nTOTDED > 0 .and. SZ2->Z2_TDIMP # '3'
			//cMenssagem := 'Retencao Lei 10.833 de 29/12/2003 (COFINS, PIS/PASEP e CSLL) R$'+Alltrim(Transform(nTOTDED,'@R 999,999.99'))
		ENDIF
		AADD(aMensagem,cMenssagem)                                // [14] PIS/COFINS/CSLL
		
		cMenssagem := ''
		IF SF2->F2_DESCONT > 0
			cMenssagem := Substr(SC5->C5_MENOTA2,1,50)
		ENDIF
		AADD(aMensagem,cMenssagem)                                // [15] DESCONTOS 
		
		cMenssagem := ''
		IF SC5->C5_CLIENTE == "030844" .AND. SC5->C5_LOJACLI == "01" .AND. SC5->C5_TCTR == "04" // CELESC - SOLICITADO POR DIDA EM 30.05.11 - BILL
			cMenssagem := "Base de calculo do INSS reduzida em 45% conforme estabelecido no art. 150 da Instrucao Normativa MPS/SRP N. 20, de  11 de Janeiro de 2007."		
   		ENDIF
   		AADD(aMensagem,cMenssagem)                                // [16] MENSAGEM CELESC
		
		//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
		//³ Impressao itens                                       ³
		//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
		
		lImprISS := .f.
		If nISS506_N <>  0 .or.	nISS505_N <>  0 .or. nISS506_S <>  0 .or. nISS500_S <>  0
			lImprISS := .t.
		EndIf
		
		
		//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
		//³ Coleta de dados do cliente                                   ³
		//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
		SA1->( DBSEEK( XFILIAL('SA1')+SF2->F2_CLIENTE+SF2->F2_LOJA ) )
		
		
		If	lImprISS .AND. SA1->A1_PESSOA == "J"
			
			If cFilPos == "015" .AND. SZ2->Z2_TCTR $ "00,01,90,91"
				
				cMenssagem := "Salarios e encargos sociais   - : R$"+Alltrim(Transform(nISS506_S,'@E 999,999.99'))
				AADD(aMensagem,cMenssagem)
				cMenssagem := "Outros insumos e taxa de adm. - : R$"+Alltrim(Transform(nISS505_N,'@E 999,999.99'))
				AADD(aMensagem,cMenssagem)
				cMenssagem := "Reducao base calculo ISS cfe Art.17 parag.III da LC 169 de 29/12/2004 de Joinville: R$"+Alltrim(Transform(nISS506_N,'@E 999,999.99'))
				AADD(aMensagem,cMenssagem)
				cMenssagem := "Base de calculo sem reducao: R$"+Alltrim(Transform(nISS500_S,'@E 999,999.99'))
				AADD(aMensagem,cMenssagem)
				
			EndIf
			
		Endif
		
	ENDIF
ENDIF


// Mensagem do Vencimento da Fatura
cMenssagem := "Vencimento: "+xVencto
AADD(aMensagem,cMenssagem )
cMenssagem := ""

// Mensagem do numero de SAC por último
AADD(aMensagem,cMenAut )

// Restaura área.
RestArea(_aArea)

Return()

/*
* FORMATA A DATA
*/
Static Function sfForDate(cData)

Local cRet := ""
Local dData := StoD(cData)
Local nDia := Day(dData)
Local nMes := Month(dData)
Local nAno := Year(dData)
Local aMes := {"jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"}

cRet := StrZero(nDia,2)+"/"+Alltrim(StrZero(nMes,2))+"/"+Alltrim(STR(nAno))

Return cRet
